设计模式——工厂模式

整理资料发现了大话设计模式的书,但是好像从来没有仔细完整的看过,为了不让我的书发霉浪费,决定梳理学习一下,之前有写过一篇设计模式是适配器模式,今天写一个最基本的工厂模式

工厂模式是属于创建型模式,它定义一个创建对象的接口,然后子类决定实例化哪一个工厂

优点:如果需要增加产品,只要增加一个工厂类就可以;创建一个对象,只需要知道名称

缺点:每增加一个产品增加一个工厂类,类的个数会比较多

下面贴一下例子,原谅我把工厂和抽象工厂搞得不是很清楚

//产品水果接口
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();
	}
}

今天的工厂模式基本就这样

以上

最后共勉

Sometimes people think they lose things and they didn't really lose them. It just gets moved. 

人们有时以为失去了什么,其实没有,只是被移开了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值