整理资料发现了大话设计模式的书,但是好像从来没有仔细完整的看过,为了不让我的书发霉浪费,决定梳理学习一下,之前有写过一篇设计模式是适配器模式,今天写一个最基本的工厂模式
工厂模式是属于创建型模式,它定义一个创建对象的接口,然后子类决定实例化哪一个工厂
优点:如果需要增加产品,只要增加一个工厂类就可以;创建一个对象,只需要知道名称
缺点:每增加一个产品增加一个工厂类,类的个数会比较多
下面贴一下例子,原谅我把工厂和抽象工厂搞得不是很清楚
//产品水果接口
public interface Fruit {
void color();
}
//产品人的接口
public interface Human {
void eat();
}
//水果的实现类1
public class Apple implements Fruit{
@Override
public void color() {
// TODO Auto-generated method stub
System.out.println("这个苹果是红色的");
}
}
//水果的实现类2
public class Orange implements Fruit{
@Override
public void color() {
// TODO Auto-generated method stub
System.out.println("这个橙子当然是橙色的");
}
}
//人的实现类1
public class Women implements Human{
@Override
public void eat() {
// TODO Auto-generated method stub
System.out.println("妹子们喜欢吃甜食但是要减肥");
}
}
//人的实现类2
public class Man implements Human{
@Override
public void eat() {
// TODO Auto-generated method stub
System.out.println("汉子们喜欢吃肉吧!");
}
}
上面的部分是基础的两个接口和他们分别的两个实现类
//特殊的工厂
public interface SpecialFactory {
public Human human();
public Fruit fruit();
}
新建的特殊工厂接口包含人的接口和水果的接口,创建实例实现特殊工厂的接口就可以了
//水果的实例工厂
public class FruitFactory {
public Fruit getFrite(String color){
if(color == null){
return null;
}
if(color.equalsIgnoreCase("红")){
return new Apple();
} else if(color.equalsIgnoreCase("橙")){
return new Orange();
}
return null;
}
}
//人的实例工厂
public class HumanFactory{
public Human getHuman(String sex){
if(sex == null){
return null;
}
if(sex.equalsIgnoreCase("女")){
return new Women();
} else if(sex.equalsIgnoreCase("男")){
return new Man();
}
return null;
}
}
这样工厂模式基本就结束了,如果需要新增产品,只需要新增工厂的实例就可以,测试和返回结果
public class FactoryTest {
public static void main(String[] args) {
HumanFactory humanFactory = new HumanFactory();
Human human = humanFactory.getShape("女");
Human human2 = humanFactory.getShape("男");
human.eat();
human2.eat();
FruitFactory fruitFactory=new FruitFactory();
Fruit frite = fruitFactory.getFrite("红");
Fruit frite2 = fruitFactory.getFrite("橙");
frite.color();
frite2.color();
}
}
今天的工厂模式基本就这样
以上
最后共勉