zoukankan      html  css  js  c++  java
  • 设计模式-简单工厂模式

    传统创建对象,都是在客户端,通过A a=new A()的方式创建对象。现在可以将创建的职责转交给工厂类负责。

    工厂模式主要有3种,一是简单工厂模式,二是工厂方法模式,三是抽象方法模式。这篇文章主要讲解简单工厂模式。

    package cn.itcast_01;
    /**
     * 
     * 这是一个抽象类
     * 里面有一个吃的功能
     *
     */
    
    public abstract class Animal {
        
        public abstract void eat();
    
    }
    
    package cn.itcast_01;
    
    public class Dog extends Animal {
    
        @Override
        public void eat() {
            // TODO Auto-generated method stub
            System.out.println("狗吃骨头");
    
        }
    
    }
    
    package cn.itcast_01;
    
    public class Pig extends Animal {
    
        @Override
        public void eat() {
            // TODO Auto-generated method stub
            System.out.println("猪吃饲料");
        }
        
    
    }
    
    package cn.itcast_01;
    /**
     * 
     * 提供一个动物工厂类
     *
     */
    
    public class AnimalFactory {
        private AnimalFactory(){}
        
        /*
         * 写一个功能,返回一个Dog对象即可
         * 
         */
    //    public static Dog createDog(){
    //        //即使这个里面的创建对象很复杂,但是也不需要客户端来管理。
    //        //这些复杂的事情都在工厂里给做好了    
    //        return new Dog();            
    //    }
    //    public static Pig createPig(){
    //        //即使这个里面的创建对象很复杂,但是也不需要客户端来管理。
    //        //这些复杂的事情都在工厂里给做好了    
    //        return new Pig();
    //    }
        
        /**根据不同类型的字符串,来创建不同的对象
         * 
         * 
         */
        
        public static Animal createAnimal(String type){
            if("pig".equals(type)){
                return new Pig();
            }else if("dog".equals(type)){
                
                return new Dog();
            }
            return null;
            
        }
        
        
        
        
        
    }
    
    
    
    package cn.itcast_01;
    
    public class AnimalTest {
        public static void main(String[] args) {
    
            // Pig p=AnimalFactory.createPig();
            // p.eat();
            //
            // Dog d=AnimalFactory.createDog();
            // d.eat();
    
            // 我们不能把父亲赋值给儿子。
            // 但是我们可以把儿子赋值给父亲。多态
    
            Animal a = AnimalFactory.createAnimal("dog");
            a.eat();
    
            a = AnimalFactory.createAnimal("pig");
            a.eat();
    
            // 开发中,针对对象,我们一般判断是否为null,如果不为null,才使用
            a = AnimalFactory.createAnimal("cat");
            if (a != null) {
                a.eat();
            }
        }
    }

    1.简单工厂模式
    我现在有一个动物的继承体系
      Animal
       所有的动物都要吃饭
       |--Pig
       |--Dog
       当创建对象比较简单的时候,我们就可以直接在main方法里面做了,但是,很多时候,创建对象可能还需要做一些初始化,也就是说创建对象的操作会比较复杂,这个时候,如果所有对象的创建工作我们还是在main里面就不太合适,怎么解决这个问题呢?
      
      
       简单工厂优点和缺点:
       对象的创建比较复杂的时候,就考虑使用工厂来实现
     优点:再简单工厂模式中,客户端不再负责对象的创建,而把这个责任交给了工厂类
         客户端只负责对象的调用,从而明确了各个类的职责。(单一职责)    
      缺点:由于这个工厂类负责所有对象的创建,那么,当子类不断增多的时候,我们就需要去修改这个工厂的代码,这样呢,就违反一个原则:开闭原则。
      这个时候怎么办呢
     
      这个时候就用工厂方法模式改进。

  • 相关阅读:
    COM组件
    【游戏引擎架构】入门(一)
    UNICODE字符串
    Python随笔10
    Python随笔9-函数
    Python随笔7
    Python随笔6
    Python随笔5
    Python随笔4
    Python随笔3
  • 原文地址:https://www.cnblogs.com/vinplezhang/p/3659855.html
Copyright © 2011-2022 走看看