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

Posted dhy970218

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了案例分析:设计模式与代码的结构特性相关的知识,希望对你有一定的参考价值。

.抽象工厂模式定义:

抽象工厂模式(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();

    }

}

 

以上是关于案例分析:设计模式与代码的结构特性的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

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

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

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