zoukankan      html  css  js  c++  java
  • 设计模式--工厂方法模式

    package cn.itcast_02;
    
    public abstract class Animal {
        
        public abstract void eat();
    
    }
    
    package cn.itcast_02;
    
    public interface AnimalFactory {
        public abstract Animal createAnimal();
    
    }
    
    package cn.itcast_02;
    
    public class Cat extends Animal {
    
        @Override
        public void eat() {
            // TODO Auto-generated method stub
            System.out.println("猫吃鱼");
    
        }
    
    }
    
    package cn.itcast_02;
    import cn.itcast_02.AnimalFactory;
    
    public class CatFactory implements AnimalFactory{
    
        @Override
        public Animal createAnimal() {
            return new Cat();
        }
        
    
    }
    
    package cn.itcast_02;
    
    public class Dog extends Animal {
    
        @Override
        public void eat() {
            // TODO Auto-generated method stub
            System.out.println("狗吃骨头");
        }
    
    }
    
    package cn.itcast_02;
    import cn.itcast_02.AnimalFactory;
    
    public class DogFactory implements AnimalFactory{
    
        @Override
        public  Animal createAnimal() {
            return new Dog();
        }
        
    
    }
    
    package cn.itcast_02;
    
    public class AnimalTest {
        public static void main(String[] args) {
            //使用猫的工厂
            AnimalFactory af=new CatFactory();
            Animal a=af.createAnimal();
            a.eat();
            
            //使用狗的工厂
            af=new DogFactory();
            a=af.createAnimal();
            a.eat();    
        }
    
    }

    场景   Animal    

                  动物吃的功能  

                  |--Cat   

                      |--CatFactory  

                  |--Dog   

                      |--DogFactory  

    这个时候,如果需要一个新的子类添加,怎么解决呢? 举例:添加了一个Pig类 优点;在工厂方法法模式中,客户端不在负责对象的创建,并且,当有新的子类添加的时候,只需要添加一个子类和一个子类的工厂类即可。不需要 修改以前的结构,后期更容易维护,增强了系统的扩展性。 缺点:使用该模式需要额外的编写代码。增加了工作量。

  • 相关阅读:
    perl get请求发送json数据
    一招教你玩转SQL:通过找出数据的共同属性实现SQL需求
    Uncaught (in promise) Error: Component series.map not exists. Load it first
    python post 参数
    python 发送json数据
    毫秒级从百亿大表任意维度筛选数据,是怎么做到的…
    python 日期处理
    python urlencode urldecode
    在服务器本地监控服务端口命令之ss
    在服务器本地监控服务端口命令之ss
  • 原文地址:https://www.cnblogs.com/vinplezhang/p/3659859.html
Copyright © 2011-2022 走看看