这几天java作业中出现了关于接口和工厂的,百度了一下工厂,下面有接口和工厂的文章链接(因为没有问过博主,所以大家去看原文吧),并作出自己的理解:
工厂原文出处:https://blog.csdn.net/llussize/article/details/80276627
接口原文出处:http://www.weixueyuan.net/view/6009.html
然后是自己的理解:
1.接口这玩意就相当于c++中的抽象类,它里面不允许有函数体,而且如果有类要继承接口的话要把接口里面定义的所有方法都要写了,要不然这个类就要前面加个abstract表示抽象类。
2.接口这个也可以当类来使。
3.如果在一个package中写工厂,那么也要把工厂作为一个接口,要不然main方法那里就会各种报错,一会让你加abstract一会让你在主类前面加abstract,总之就是贼麻烦。(可能自己学艺不精,求指教)
4.题目中要求要能输出创建了多少对象,这个很简单,就直接在工厂类中声明一个自己的静态属性,因为静态属性是随类一起的,都在class那个存储地方,所以如果再创建对象的时候静态属性不会再加载一次,也就说这里声明的属性是不会再被初始化的。这就跟全局变量一样的。
作业题目:创建一个Cycle接口,及其Unicycle、Bicycle、Tricycle实现。对每种类型的Cycle都创建相应的工厂,然后编写代码使用这些工厂。工厂产生的对象能够被管理,可以输出当前产生的对象总数
下面贴出我的代码:(代码也是参考了这篇文章的,有所改进和理解)https://blog.csdn.net/fyp19980304/article/details/79943233
interface Cycle {
int Cycle_Weels();
String Cycle_name();
}
class Unicycle implements Cycle{
public int Cycle_Weels()
{
return 1;
}
public String Cycle_name() {
return "Unicycle";
}
}
class Bicycle implements Cycle{
public int Cycle_Weels()
{
return 2;
}
public String Cycle_name() {
return "Bicycle";
}
}
class Tricycle implements Cycle{
public int Cycle_Weels()
{
return 3;
}
public String Cycle_name() {
return "Tricycle";
}
}
interface CycleFactory{
Cycle Produce();
}
class UnicycleFactory implements CycleFactory
{
private int Unicycle_number=0;
public Cycle Produce()
{
++Unicycle_number;
System.out.println("现在创造的独轮车的数量为:"+Unicycle_number);
return new Unicycle();
}
}
class BicycleFactory implements CycleFactory{
private int Bicycle_number=0;
public Cycle Produce()
{
++Bicycle_number;
System.out.println("现在创造的自行车的数量为:"+Bicycle_number);
return new Bicycle();
}
}
class TricycleFactory implements CycleFactory{
private int Tricycle_number=0;
public Cycle Produce()
{
++Tricycle_number;
System.out.println("现在创造的三轮车的数量为:"+Tricycle_number);
return new Tricycle();
}
}
public class CycleTest {
public static void Produce(CycleFactory cy)
{
Cycle cycle = cy.Produce();
System.out.println("现在创造的是:"+cycle.Cycle_name());
System.out.println("它的轮子数是:"+cycle.Cycle_Weels());
}
public static void main(String[] args) {
// TODO Auto-generated method stub
UnicycleFactory uf = new UnicycleFactory();
Produce(uf);
BicycleFactory bf = new BicycleFactory();
Produce(bf);
TricycleFactory tf = new TricycleFactory();
Produce(tf);
Produce(uf);
Produce(bf);
}
}