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类 优点;在工厂方法法模式中,客户端不在负责对象的创建,并且,当有新的子类添加的时候,只需要添加一个子类和一个子类的工厂类即可。不需要 修改以前的结构,后期更容易维护,增强了系统的扩展性。 缺点:使用该模式需要额外的编写代码。增加了工作量。

  • 相关阅读:
    android activity声明周期学习笔记
    java笔记之static&final&abstract
    Android 动画分析学习笔记
    43:数据分类
    42:换汽水瓶ExchangeBottle
    41:简单密码
    40: Redraiment的走法(不连续最长子字符串)
    函数返回值是引用(引用当左值)
    引用的本质
    C语言实现计算字符串中最后一个单词长度,单词以空格隔开
  • 原文地址:https://www.cnblogs.com/vinplezhang/p/3659859.html
Copyright © 2011-2022 走看看