码迷,mamicode.com
首页 > 其他好文 > 详细

案例分析:设计模式与代码的结构特性

时间:2019-12-08 14:05:07      阅读:102      评论:0      收藏:0      [点我收藏+]

标签:ali   测试   system   abs   gre   rri   种类型   over   创建   

.抽象工厂模式定义:

抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。

.抽象工厂包含的角色:

    抽象工厂:声明一组用于创建一族产品的方法,每个方法对应一种对象;在抽象工厂中声明了多个工厂方法, 用于创建不同类型的对象, 抽象工厂可以是接口, 也可以是抽象类或者具体类。

具体工厂:具体工厂实现了抽象工厂,每个工厂方法返回一个具体对象,一个具体工厂所创建的具体对象构成一个族。

抽象类接口:提供一组所有类都具有的业务方法。

抽象类:用于实现抽象接口所定义的业务方法,但是该角色对于抽象接口定义的方法只做抽象实现,即所有实现都被定义为抽象方法,最终的具体实现全部交给具体类实现。引入该角色主要是为了根据声明不同的抽象类,将类区分为不同的等级结构。

具体类:该角色继承抽象类,主要用于实现抽象类中声明的抽象方法,完成不同等级结构,不同族的业务方法的具体实现。

三. 具体场景:

在我们常用的社交软件中,为了满足客户交流时的舒适需求,会添加一些改变背景或者皮肤的功能,这些功能必然会包含改变颜色,改变形状等等功能的代码,下面我们就用抽象工厂模式代码来实现这个需求。

四. 代码实现:

设计抽象接口:

public interface Shape {

    void draw();

}

//圆形抽象类Circle

public abstract class Circle implements Shape {

    public abstract void draw();

}

//长方形抽象类Rectange

public abstract class Rectange implements Shape {

    public abstract void draw();

}

具体的实现类继承自对应的抽象类

//具体颜色的Circle实现

public class BlueCircle extends Circle {

    @Override

    public void draw() {

        System.out.println("绘制蓝色的圆");

    }

}

public class RedCircle extends Circle {

    @Override

    public void draw() {

        System.out.println("绘制红色的圆");

    }

}

 

//具体颜色的Rectange实现

public class RedRectange extends Rectange{

    @Override

    public void draw() {

        System.out.println("绘制红色长方形");

    }

}

public class BlueRectange extends Rectange {

    @Override

    public void draw() {

        System.out.println("绘制蓝色长方形");

    }

}

具体类族的划分我们以颜色为基础,不同类族的对象我们通过对应的具体工厂来创建。

//抽象工厂ShapeFactory

public interface ShapeFactory {

    Shape getCircle();

    Shape getRectange();

}

 

//RedShapeFactory(他所代表的是红色形状这一族)

public class RedShapeFactory implements ShapeFactory {

    @Override

    public Shape getCircle() {

        return new RedCircle();

    }

 

    @Override

    public Shape getRectange() {

        return new RedRectange();

    }

}

 

//BlueShapeFactory(他所代表的是兰色形状这一族)

public class BlueShapeFactory implements ShapeFactory {

    @Override

    public Shape getCircle() {

        return new BlueCircle();

    }

 

    @Override

    public Shape getRectange() {

        return new BlueRectange();

    }

}

测试实现工厂模式:

public class TestDemo {

    public static void main(String[] args) {

        ShapeFactory redShapeFactory = new RedShapeFactory();

        Shape circle = redShapeFactory.getCircle();

        circle.draw();

        Shape rectangle = redShapeFactory.getRectange();

        rectangle.draw();

        ShapeFactory greenShapeFactory = new GreenShapeFactory();

        Shape greenCircle = greenShapeFactory.getCircle();

        greenCircle.draw();

    }

}

 

案例分析:设计模式与代码的结构特性

标签:ali   测试   system   abs   gre   rri   种类型   over   创建   

原文地址:https://www.cnblogs.com/dhy970218/p/12005557.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!