工厂设计原则

一.工厂

简单工厂

package 简单工厂;

public abstract class animal {
    public abstract void eat();
}

package 简单工厂;

public class cat extends animal {
   public void eat() {
	   System.out.println("猫吃鱼");
   }
}

package 简单工厂;

public class dog extends animal{

	public void eat() {
		System.out.println("狗吃骨头");
	}
    
}
package 简单工厂;

public class Factory {
    public static animal getAnimal(String s) {
    	if("cat".equals(s)) {
    		return new cat();
    	}else if("dog".equals(s)) {
    		return new dog();
    	}
    	return null;
    }
}


package 简单工厂;
/**
 *简单工厂模式--->静态工厂方法模式 
 *
 *	设计一个工厂类:
 *		工厂类提供一些静态方法,间接的去创建具体的对象
 *优点:
 *		不需要在创建具体类的对象,而是把创建的工作交给了工厂类来创建!
 *弊端:如果有新的对象增加,或者某些对象的创建方式不同,就需要不断的修改工厂类,不利于后期的维护
 */
public class demo {
    public static void main(String[] args) {
		//常规建立cat和dog对象的步骤
    	cat c = new cat();
    	dog d = new dog();
    	//调用每个对象的方法
    	c.eat();
    	d.eat();
    	
    	System.out.println("--------------------------");
    	
    	//优化:加入工厂接口
    	//在工厂中使用多肽的方法建立猫狗对象
    	animal dog = Factory.getAnimal("dog");
    	animal cat = Factory.getAnimal("cat");
    	//但是如果输入没有建立的对象
    	animal pig = Factory.getAnimal("pig");
    	dog.eat();
    	cat.eat();
    	//java.lang.NullPointerException  空指针异常
    	//因为无法建立pig对象
    	pig.eat();
	}
}

二.静态工厂设计

package 静态工厂;

public abstract class animal {
    public abstract void eat();
}

package 静态工厂;

public class cat extends animal {
   public void eat() {
	   System.out.println("猫吃鱼");
   }
}

package 静态工厂;

public class catfac implements factory {

	@Override
	public animal getanimal() {
		return new cat();
	}

	
}

package 静态工厂;

public class dog extends animal{

	public void eat() {
		System.out.println("狗吃骨头");
	}
    
}

package 静态工厂;

public class dogfac implements factory {

	@Override
	public animal getanimal() {
		return new dog();
	}

}

package 静态工厂;

public interface factory {
  public abstract animal getanimal();
}
package 静态工厂;
/**工厂方法模式
*		提供一个抽象类(抽象工厂)还需要提供一个接口(工厂接口),每一个具体的类都有对应的工厂类(实现工厂接口)
*		具体对象的创建工作由继承抽象工厂的具体类实现
*
*优点:
*		客户端不需要在负责对象的创建(不需显示创建具体对象),从而明确了各个类的职责,
*		如果有新的对象增加,只需要增加一个具体的类和具体的工厂类即可,不影响已有的代码,后期维护容易,增强了系统的扩展性
	弊端:
		书写代码量大了!
*/
public class demo {
    public static void main(String[] args) {
    	//通过cat的工厂建立对象
    	catfac catf = new catfac();
    	//对象调用方法建立cat的对象
    	animal cat = catf.getanimal();
    	cat.eat();
    	
    	//通过dog的工厂建立对象
    	dogfac dogf = new dogfac();
    	//对象调用方法建立dog的对象
    	animal dog = dogf.getanimal();
    	dog.eat();
	}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值