Java设计模式——工厂模式示例

工厂模式

参考内容:工厂模式

  1. 简单工厂模

    定义一个工厂类,根据传入的参数不同创建不同的实例

    package factoryPattern.simple;
    public interface Shape{
         void draw();
    }
    
    package factoryPattern.simple;
    // 画圆类
    public class CircleShape implements Shape{
    
        @Override
        public void draw() {
            System.out.println("开始画圆");
    
        }
        
    }
    
    package factoryPattern.simple;
    
    public class RectShape implements Shape{
    
        @Override
        public void draw() {
            System.out.println("绘制矩形");
    
        }
        
    }
    
    package factoryPattern.simple;
    
    public class TangleShape implements Shape{
    
        @Override
        public void draw() {
            System.out.println("绘制三角形");
    
        }
        
    }
    
    package factoryPattern.simple;
    
    public class ShapeFactory{
        public static final String TAG ="ShapeFactory";
        public static Shape getShape(String type){
            if(type.equals("circle")){
                return new CircleShape();
            }
            else if(type.equals("rect")){
                return new RectShape();
            }
            else{
                return new TangleShape();
            }
            
        }
    }
    
    package factoryPattern.simple;
    
    public class Test {
    
        public static void main(String[] args) {
            Shape rectShape = ShapeFactory.getShape("rect");
            rectShape.draw();
    
            Shape circleShape = ShapeFactory.getShape("circle");
            circleShape.draw();
    
            Shape tangleShape = ShapeFactory.getShape("tangle");
            tangleShape.draw();
    
        }
        
    }
    
  2. 工厂方法模式

    每个对象都有一个与之对应的工厂

    Java设计模式——工厂模式示例_第1张图片

    package factoryPattern.factoryMethod;
    
    public interface Read {
        void read();
    }
    
    package factoryPattern.factoryMethod;
    
    public class PngRead implements Read{
        @Override
        public void read() {
            System.out.println("读取Png格式图片");
        }
        
    }
    
    package factoryPattern.factoryMethod;
    
    public class JpgRead implements Read{
        @Override
        public void read() {
            System.out.println("读取Jpg图片");
        }
        
    }
    
    package factoryPattern.factoryMethod;
    
    public interface ReadFactory {
        Read getRead();
        
    }
    
    package factoryPattern.factoryMethod;
    public class GifGetReadFactory implements ReadFactory{
        @Override
        public Read getRead() {
            return new GifRead();
        }
        
    }
    
    package factoryPattern.factoryMethod;
    
    public class PngGetReadFactory implements ReadFactory{
        @Override
        public Read getRead() {
            return new PngRead();
        }
        
    }
    
    package factoryPattern.factoryMethod;
    
    public class JpgGetReadFactory implements ReadFactory{
        @Override
        public Read getRead() {
            return new JpgRead();
        }
        
    }
    
    package factoryPattern.factoryMethod;
    
    public class Test {
        public static void main(String[] args) {
            ReadFactory jpgread = new JpgGetReadFactory();
            Read jRead =jpgread.getRead();
            jRead.read();
            ReadFactory pngread =new PngGetReadFactory();
            Read pRead =pngread.getRead();
            pRead.read();
            ReadFactory gifread =new GifGetReadFactory();
            Read gRead =gifread.getRead();
            gRead.read();
        }
    }
    
  3. 抽象工厂模式

    提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类
    Java设计模式——工厂模式示例_第2张图片

    package factoryPattern.abstractFactory;
    
    public interface operationController {
        void control();
        
    }
    
    package factoryPattern.abstractFactory;
    
    public interface UiController {
        void display();
        
    }
    
    package factoryPattern.abstractFactory;
    
    public class AndoridOperationFactroy implements operationController{
        @Override
        public void control() {
            System.out.println("Andorid平台操作");
        }
        
    }
    
    package factoryPattern.abstractFactory;
    
    public class AndoridUIController implements UiController{
        @Override
        public void display() {
            System.out.println("Andorid界面");
        }
    }
    
    package factoryPattern.abstractFactory;
    
    public class iosOperationFactory implements operationController{
        @Override
        public void control() {
            System.out.println("ios平台操作");
        }
    }
    
    package factoryPattern.abstractFactory;
    
    public class iosUIController implements UiController{
        @Override
        public void display() {
            System.out.println("ios界面");
        }
    }
    
    package factoryPattern.abstractFactory;
    
    public class WpOperationFactroy implements operationController{
        @Override
        public void control() {
            System.out.println("window平台操作");
        }
        
    }
    
    package factoryPattern.abstractFactory;
    
    public class WpUIController implements UiController{
        @Override
        public void display() {
            System.out.println("window界面");
        }
    }
    
    package factoryPattern.abstractFactory;
    
    public class WpUIController implements UiController{
        @Override
        public void display() {
            System.out.println("window界面");
        }
    }
    
    package factoryPattern.abstractFactory;
    
    public interface SystemFactory {
        public operationController cOperationController();
        public UiController cUiController();
    }
    
    package factoryPattern.abstractFactory;
    
    public class AndoridFactory implements SystemFactory{
    
        @Override
        public operationController cOperationController() {
            return new AndoridOperationFactroy();
        }
    
        @Override
        public UiController cUiController() {
            return new AndoridUIController();
        }
        
    }
    
    package factoryPattern.abstractFactory;
    
    public class iosFactory implements SystemFactory{
        @Override
        public operationController cOperationController() {
            return new iosOperationFactory();
        }
        @Override
        public UiController cUiController() {
            return new iosUIController();
        }
    }
    
    package factoryPattern.abstractFactory;
    
    public class WpFactor implements SystemFactory{
        @Override
        public operationController cOperationController() {
            return new WpOperationFactroy();
        }
        @Override
        public UiController cUiController() {
            return new iosUIController();
        }
        
    }
    
    package factoryPattern.abstractFactory;
    
    public class AndoridFactory implements SystemFactory{
    
        @Override
        public operationController cOperationController() {
            return new AndoridOperationFactroy();
        }
    
        @Override
        public UiController cUiController() {
            return new AndoridUIController();
        }
        
    }
    
    package factoryPattern.abstractFactory;
    
    public class iosFactory implements SystemFactory{
        @Override
        public operationController cOperationController() {
            return new iosOperationFactory();
        }
        @Override
        public UiController cUiController() {
            return new iosUIController();
        }
    }
    
    package factoryPattern.abstractFactory;
    
    public class WpFactor implements SystemFactory{
        @Override
        public operationController cOperationController() {
            return new WpOperationFactroy();
        }
        @Override
        public UiController cUiController() {
            return new iosUIController();
        }
        
    }
    
    package factoryPattern.abstractFactory;
    
    public class Test {
        public static void main(String[] args) {
            SystemFactory systemFactory;
            UiController uiController;
            operationController operationcontroller;
    
            systemFactory = new AndoridFactory();
    
            uiController = systemFactory.cUiController();
            operationcontroller= systemFactory.cOperationController();
            uiController.display();
            operationcontroller.control();
        }
        
    }
    

你可能感兴趣的:(Java设计模式——工厂模式示例)