工厂设计原则

论坛 期权论坛 脚本     
匿名技术用户   2020-12-21 23:46   11   0

一.工厂

简单工厂

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 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP