【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

这篇具有很好参考价值的文章主要介绍了【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

一、设计模式的分类

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)
【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

背背背

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

1

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

二、创建型设计模式(5种)

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

三、简单工厂模式

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)
【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

简单工厂模式代码实现如下:

/**
 * @author:CaiCai
 * @date : 2023/4/26 9:11
 * 
 */

/*
简单工厂模式
*  */
public class SimpleFactory {

    public static void main(String[] args){
        Product productA=Factory.createProduct("A");
        productA.info();

        Product productB=Factory.createProduct("B");
        productB.info();
    }

}
class Factory {
    public static Product createProduct(String type){
        Product product =null;
        switch (type){
            case "A":
                product=new ProductA();
                break;
            case "B":
                product=new ProductB();
                break;
            default:
                System.out.println("没有"+ type +"类型的产品!");
                break;
        }
        return product;
    }
}

abstract  class Product{
    public abstract  void info();
}

class ProductA extends  Product{
    @Override
    public  void info(){
        System.out.println("产品信息:A");
    }
}
class ProductB extends  Product{
    @Override
    public  void info(){
        System.out.println("产品信息:B");
    }
}

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

四、工厂方法模式

📢意图要背
【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)
【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)
工厂方法代码实现如下:

/**
 * @author :CaiCai
 * @date : 2023/4/26 11:54
 */
public class FactoryMethods {
    public static void main(String[] args) {

        Factory factoryA=new FactoryA();
        Product productA=factoryA.createProduct();
        productA.info();

        Factory factoryB=new FactoryB();
        Product productB=factoryB.createProduct();
        productB.info();
    }
}


//class Factory
interface Factory{
    public Product createProduct();

}
class FactoryA implements Factory{
    @Override
    public Product createProduct() {
        return new ProductA();
    }
}

class FactoryB implements Factory{
    @Override
    public Product createProduct() {

        return new ProductB();
    }
}


interface Product{
public  void info();
}
class ProductA implements Product{
    @Override
    public void info(){
        System.out.println("产品的信息:A");
    }
}

class ProductB implements Product{
    @Override
    public void info(){
        System.out.println("产品的信息:B");
    }
}

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

五、抽象工厂模式

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

抽象工厂模式代码如下:

/**
 * @author :CaiCai
 * @date : 2023/4/26 11:54
 */
public class AbstractFactory {
    public static void main(String[] args) {

        Factory factory1=new Factory1();
        ProductA productA=factory1.createProductA();
        productA.info();

        Factory factory2=new Factory2();
        ProductB productB=factory2.createProductB();
        productB.info();
    }
}


//class Factory
interface Factory{
    public ProductA createProductA();
    public ProductB createProductB();

}
class Factory1 implements Factory{
    @Override
    public ProductA createProductA() {
        return new ProductA1();
    }
    @Override
    public ProductB  createProductB() {
        return new ProductB1();
    }
}

class Factory2 implements Factory{
    @Override
    public ProductA createProductA() {
        return new ProductA2();
    }
    @Override
    public ProductB createProductB() {
        return new ProductB2();
    }
}


interface ProductA{
public  void info();
}
class ProductA1 implements ProductA{
    @Override
    public void info(){
        System.out.println("产品的信息:A1");
    }
}
class ProductA2 implements ProductA{
    @Override
    public void info(){
        System.out.println("产品的信息:A2");
    }
}


interface ProductB{
    public void info();
}
class ProductB1 implements ProductB{
    @Override
    public void info(){
        System.out.println("产品的信息:B1");
    }
}
class ProductB2 implements ProductB{
    @Override
    public void info(){
        System.out.println("产品的信息:B2");
    }
}

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

2

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

3

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

六、生成器模式

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)
生成器模式代码如下:

import java.util.ArrayList;
import java.util.List;

/**
 * @author     :CaiCai
 * @date       : 2023/4/26 13:49
 * 
 */public class Main {
    public static void main(String[] args) {
        Director director=new Director();
        Builder builder1=new Builder1();
        director.Construct(builder1);
        Product product1=builder1.getResult();
        product1.show();

        Builder builder2=new Builder2();
        director.Construct(builder2);
        Product product2=builder2.getResult();
        product2.show();

    }
}
class Director{
     public void Construct(Builder builder){
         builder.BuildPart();
     }
}
abstract class Builder{
     public abstract void BuildPart();
     public abstract Product getResult();
}
class Builder1 extends Builder{
     Product product=new Product();
     @Override
    public void BuildPart(){
         product.Add("A");
         product.Add("B");
         product.Add("C");
         product.Add("D");
     }

    @Override
    public Product getResult(){
         return product;

    }
}


class Builder2 extends Builder{
    Product product=new Product();
    @Override
    public void BuildPart(){
        product.Add("A");
        product.Add("B");
        product.Add("C");

    }

    @Override
    public Product getResult(){
        return product;

    }
}



class Product{
     List<String> parts=new ArrayList<String>();

     public void Add(String part){
         parts.add(part);
     }

     public void show(){
         System.out.println("产品的组成:");
         for(String s : parts)
             System.out.print(s+"");

         System.out.print("\n");
     }
}

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

4

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

5

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

6

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)
【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

七、原型模式

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)
【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

原型模式代码实现如下:

public class Main {
    public static void main(String[] args) {
        Product product1=new Product(2023,4.26);
        System.out.println(product1.getId()+"  "+product1.getPrice());

        Product product2=(Product)product1.Clone();
        System.out.println(product2.getId()+"  "+product2.getPrice());
    }
}

interface Prototype{
public  Object Clone();
}

class Product implements Prototype{
    private int id;
    private double price;
    public Product(){}

    public Product(int id,double price){
        this.id=id;
        this.price=price;

    }
    public int getId(){
        return  id;
    }

    public double getPrice(){
        return price;
    }

    @Override
    public Object Clone(){
        Product object=new Product();
        object.id=this.id;
        object.price=this.price;
        return object;
    }
}

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

八、单例模式

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)
单例模式代码如下:

public class SingletonPattern {
    public static void main(String[] args) {

        Singleton singleton1=Singleton.getInstance();
        Singleton singleton2=Singleton.getInstance();
        Singleton singleton3=Singleton.getInstance();
        System.out.println(singleton1.getNumber()+" "+singleton2.getNumber()+" "+singleton3.getNumber());

        singleton1.setNumber(2024);
        System.out.println(singleton1.getNumber()+" "+singleton2.getNumber()+" "+singleton3.getNumber());

    }

}

class Singleton{
    private  int number=2023;
    public void setNumber(int number){
        this.number=number;
    }
    public int getNumber(){
        return number;
    }
 private static Singleton instance=new Singleton();

    private Singleton(){}

    public static Singleton getInstance(){
        return instance;
    }
}

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

7

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

8

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

9

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

结构型设计模式(7种)

结构型速记:桥代理组装适配器,享元回家装饰外观

(乔丹代理了组合(两台)适配器),享元(人名)买回家装饰外观。

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

九、适配器模式

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

public class AdaptPattern {
    public static void main(String[] args) {
      Target target=new Adapter();
      target.Request();
    }

}

class Target{
    public void Request(){
        System.out.println("普通请求");
    }
}

class Adapter extends Target{
    private Adapt adapt=new Adapt();
    @Override
    public void Request(){
        adapt.SpecificRequest();
    }
}

class Adapt{
    public void SpecificRequest(){
        System.out.println("特殊请求");
    }
}


【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

10

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

十、桥接模式

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)
【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)
桥接模式代码实现如下:

public class BridgePattern {
    public static void main(String[] args) {
        Product productA1=new ProductA();
        Product productA2=new ProductA();
        Color red=new Red();

       productA1.setName("产品A1");
        productA1.setColor(red);
        productA1.Operation();

     Blue blue=new Blue();
        productA2.setName("产品A2");
        productA2.setColor(blue);
        productA2.Operation();
    }

}

abstract class Product {
    private String name;
    protected Color color;

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setColor(Color color) {
        this.color = color;
    }

    public abstract void Operation();
}


class ProductA extends Product {
    @Override
    public void Operation() {
        color.OperationImp(this.getName());
    }
}
    interface Color {
        public void OperationImp(String name);

    }
    class Red implements Color{
        @Override
        public void OperationImp(String name){
            System.out.println(name+":红色");
        }
    }
    class Blue implements Color{
        @Override
        public void OperationImp(String name){
            System.out.println(name+":蓝色");
        }
    }


【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

11

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

12

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

13

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)
【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

十一、组合模式

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)
组合模式添加和删除代码实现:

import java.util.ArrayList;
import java.util.List;

public class CompositePattern {
    public static void main(String[] args) {
        AbstractFile root=new Folder("root");
        AbstractFile folderA=new Folder("folderA");
        AbstractFile fileB=new File("fileB");
        System.out.println(root.Add(folderA));
        System.out.println(root.Add(fileB));

        System.out.println(root.Remove(fileB));
        System.out.println(root.Remove(fileB));

    }

}

abstract class AbstractFile{
    protected  String name;
    public void printName(){
        System.out.println(name);
    }

    public abstract boolean Add(AbstractFile file);
    public  abstract boolean Remove(AbstractFile file);
    //
}

class Folder extends AbstractFile{
    private List<AbstractFile> childrenList=new ArrayList<AbstractFile>();
    public Folder(String name) {
        this.name=name;
    }
    @Override
    public boolean Add(AbstractFile file){
   return childrenList.add(file);
    }

    @Override
    public boolean Remove(AbstractFile file){
     return  childrenList.remove(file);
    }
}


class File extends AbstractFile{
    public File(String name){
        this.name=name;
    }
    @Override
    public boolean Add(AbstractFile file){
        return false;
    }
    @Override
    public boolean Remove(AbstractFile file){
        return false;
    }
}

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

14

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

15

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

16

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

十二、装饰器模式

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)
装饰器模式代码实现:


public class DecoratePattern {
    public static void main(String[] args) {
        Person zhangsan=new Student("张三");
        zhangsan.Operation();

        System.out.println("\n=======我是分割线=======");
   // Decorator decoratorA=new DecoratorA(zhangsan);
     //   decoratorA.Operation();
        zhangsan=new DecoratorA(zhangsan);
        zhangsan.Operation();


    }
}

abstract class Decorator extends Person{
    protected  Person person;
}

class DecoratorA extends Decorator{
    public DecoratorA(Person person){
        this.person=person;
    }

    @Override
    public void Operation(){//职责
        person.Operation();//原本的职责
        System.out.print("写作业");

    }

}
abstract class Person{
    protected String name;

    public abstract void Operation();//职责
}

class Student extends Person{
    public Student(String name)
    {
        this.name=name;
    }
    @Override
    public void Operation(){
        System.out.print(name+"的职责:学习");
    }


}

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

17

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

十三、外观模式

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)
【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

外观模式代码实现:

import javax.security.auth.Subject;

public class FacadePattern {
    public static void main(String[] args) {
         Facade facade=new Facade();

        facade.methodA();
        facade.methodB();
        facade.methodC();
    }
}
class Facade {
    SubSystemOne subSystemOne;
    SubSystemTwo subSystemTwo;
    SubSystemThree subSystemThree;


    public Facade() {
        subSystemOne = new SubSystemOne();
        subSystemTwo = new SubSystemTwo();
        subSystemThree = new SubSystemThree();

    }
    public void methodA(){
        subSystemOne.methodOne();

    }
    public void methodB(){
        subSystemTwo.methodTwo();

    }
    public void methodC(){
        subSystemThree.methodThree();

    }
}

class SubSystemOne{
    public void methodOne(){
        System.out.println("执行子系统一的功能");
    }
}

class SubSystemTwo{
    public void methodTwo(){
        System.out.println("执行子系统二的功能");
    }
}

class SubSystemThree{
    public void methodThree(){
        System.out.println("执行子系统三的功能");
    }
}

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

18

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

19

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

十四、享元模式

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)
【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

20

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

十五、代理模式

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)
【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)
代理模式代码实现:

public class ProxyPattern {
    public static void main(String[] args) {
        RealSubject realSubject=new RealSubject();
        Proxy proxy=new Proxy(realSubject);

        proxy.buy();
    }
}
interface  Subject{
    public void buy();
}

class  Proxy implements Subject{
    protected RealSubject realSubject;
 public Proxy(RealSubject realSubject){
     this.realSubject=realSubject;
 }

    @Override
    public void buy(){
        System.out.println("办理购买的手续");
        realSubject.buy();//付钱
        System.out.println("办理购买后的手续");

    }
}

class RealSubject implements Subject{
    @Override
    public void buy(){
        System.out.println("付钱");
    }
}

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

21

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

行为型设计模式(11种)

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

十六、责任链模式

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)
【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

代码实现:
【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

十七、命令模式

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)
【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

22

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

23

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)
【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

十八、解释器模式

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)
【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)
【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

十九、迭代器模式

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

二十、中介者模式

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)


public class MediatorPattern {
    public static void main(String[] args) {
        ConcreteMediator mediator=new ConcreteMediator();

        Colleague1 colleague1=new Colleague1(mediator);
        Colleague2 colleague2=new Colleague2(mediator);

        mediator.setColleague1(colleague1);
        mediator.setColleague2(colleague2);

        colleague1.sendMessage("祝大家软考一次性通过!!");
        colleague2.sendMessage("2023年5月27软考");

    }

}

abstract class Colleague{
    protected Mediator mediator;
}

class Colleague1 extends Colleague{
    public Colleague1(Mediator mediator){
        this.mediator=mediator;

    }

    public  void sendMessage(String message){
        mediator.sendMessage(message,this);
    }
    public void Notify(String message){
        System.out.println("同事1收到消息:"+ message);
    }
}

class Colleague2 extends Colleague{
    public Colleague2(Mediator mediator){
        this.mediator=mediator;
    }
    public  void sendMessage(String message){
        mediator.sendMessage(message,this);
    }
    public void Notify(String message){
        System.out.println("同事2收到消息:"+message);
    }
}

abstract class Mediator {
    public abstract void sendMessage(String message, Colleague colleague);
}


class ConcreteMediator extends Mediator{
    private Colleague1 colleague1;
    private Colleague2 colleague2;

    public void setColleague1(Colleague1 colleague1){
        this.colleague1=colleague1;
    }

    public void setColleague2(Colleague2 colleague2){
        this.colleague2=colleague2;
    }
    public void sendMessage(String message,Colleague colleague){
if(colleague==colleague1){
    //让同事2收到消息
    colleague2.Notify(message);
}else {
    //让同事1收到消息
    colleague1.Notify(message);

}

    }
}

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

24

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

二十一、备忘录模式

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)
【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

import java.util.ArrayList;
import java.util.List;

public class MementoPattern {
    public static void main(String[] args) {
        Caretaker caretaker=new Caretaker();
        Originator originator=new Originator();

        originator.setState("427");
        Memento backup1=originator.createMemento();
        caretaker.addMemento(backup1);

        originator.setState("428");
        Memento backup2=originator.createMemento();
        caretaker.addMemento(backup2);

        originator.setState("429");
        Memento backup3=originator.createMemento();
        caretaker.addMemento(backup3);

        System.out.println(originator.getState());

        caretaker.showMemento();

      Memento memento1=caretaker.getMemento(2);
      originator.setMemento(memento1);


      System.out.println("根据第2次备份还原之后的状态为:"+originator.getState());

    }


}

class Originator{//原发器
    private String state;

    public void setState(String state){
        this.state=state;

    }

    public String getState(){
        return  state;
    }

    public Memento createMemento(){
        return new Memento(state);

    }
    public void setMemento(Memento memento){
        state=memento.getState();
    }

}

class Memento{//备忘录
    private String state;
    public Memento(String state){
        this.state=state;
    }

    public String getState(){
        return state;
    }
}
class Caretaker{//管理者
    private List<Memento> mementoList=new ArrayList<>();

    public void addMemento(Memento memento){
        mementoList.add(memento);
    }

    public Memento getMemento(int index){
        //判断参数是否合法
        if(index>=1 &&index<=mementoList.size()){
            return mementoList.get(index-1);
        }
        return null;
    }

    public void showMemento(){
        int cnt=1;
        for(Memento memento:mementoList){
            System.out.println("第" + cnt +" 次备份,状态为:"+memento.getState());
        cnt++;
        }
    }
}

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

二十一、观察者模式

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)
【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)
【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)
【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

25

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

26

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

27

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

28

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

29

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

30

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)
【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

31

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

二十二、状态模式

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)
【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

代码实现:

public class StatePattern {
    public static void main(String[] args) {
        Context context=new Context();
        System.out.println(context.getState());
        context.Request();//2
        context.Request();//1
        context.Request();//0


        System.out.println(context.getState());
        context.Request();//无货
    }

}


class Context{//贩卖机
    private int count;

    private State state;

    public Context(){
        count=3;
        state=new StateA();
    }
    public int getCount(){
        return count;
    }

    public void setCount(int count){
        this.count=count;
    }
    public State getState(){
        return state;
    }
    public void getState(State state){
        this.state=state;
    }
    public void Request(){//购买一瓶饮料
        state.Handle(this);

    }


    public void setState(StateA stateA) {
    }

    public void SetState(StateB stateB) {
    }
}

interface State{
    public void Handle(Context context);
}


class StateA implements State{//有货
    @Override
    public void Handle(Context context){
int count=context.getCount();
if(count>=1){
    System.out.println("购买成功");
    context.setCount(count-1);

    if(context.getCount()==0){
        context.SetState(new StateB());
    }
}else{
    System.out.println("购买失败!");
}
    }

}

class StateB implements State{//无货
    @Override
    public void Handle(Context context){
int count=context.getCount();
        if(count==0){
            System.out.println("购买成功,等待补货");
            context.setCount(5);
            System.out.println("补货成功。请重新购买");
            context.setState(new StateA());
        }
    }

}

32

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)
【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

33

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)
【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)
【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

44-47 B A D C

二十三、策略模式

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)
【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

34

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

35

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

36

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

二十四、模板方法模式

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)
【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

二十五、访问者模式

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)
【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)
【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

代码实现:

import java.util.ArrayList;
import java.util.List;

public  class VisitorPattern {
    public static void main(String[] args) {
        PersonStructure structure=new PersonStructure();
       Visitor1 visitor1=new Visitor1();

        System.out.println("访问者1访问记录");
        structure.Accept(visitor1);
        System.out.println("===============");


        Visitor2 visitor2=new Visitor2();
        System.out.println("访问者2访问记录");

        structure.Accept(visitor2);
    }

}

interface Visitor{
    public void visitStudent(Student student);
    public void visitTeacher(Teacher teacher);
}

class Visitor1 implements Visitor{
    @Override
    public void visitStudent(Student student){
        System.out.println("访问者1访问学生"+student.name);
    }
    @Override
    public void visitTeacher(Teacher teacher){
        System.out.println("访问者1访问老师"+teacher.name);


    }
}
class Visitor2 implements Visitor{

    @Override
    public void visitStudent(Student student){
        System.out.println("访问者2访问学生"+student.name);
    }
    @Override
    public void visitTeacher(Teacher teacher){
        System.out.println("访问者2访问老师"+teacher.name);


    }
}
class PersonStructure{
    private List<Person> personList=new ArrayList<Person>();
public PersonStructure(){
    personList.add(new Student("张三"));
    personList.add(new Student("李四"));
    personList.add(new Student("王五"));

    personList.add(new Student("李老师"));
    personList.add(new Student("陈老师"));
    personList.add(new Student("刘老师"));
}

public void Accept(Visitor visitor){
    for(Person  person:personList){
        person.Accept(visitor);
    }
}
}
abstract class Person{
    public String name;

    public abstract void Accept(Visitor visitor);

}

class Student extends Person{
    public Student(String name){
        this.name=name;
    }
@Override
    public void Accept(Visitor visitor){
    visitor.visitStudent(this);
}
}

class Teacher extends Person{
    public Teacher(String name){
        this.name=name;
    }
    @Override
    public void Accept(Visitor visitor){
        visitor.visitTeacher(this);
    }
}

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

37

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

Accept只在访问者模式出现

38

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)
【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

二十六、设计模式总和

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

39

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

40

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

41

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

结构型:适配桥想组装外带

42

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

43

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)
【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

44

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

45

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)

46

【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)文章来源地址https://www.toymoban.com/news/detail-471149.html

本章完结撒花👏👏👏👏

到了这里,关于【中级软件设计师】—(针对上午题)二十三种设计模式(三十九)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 中级软件设计师备考---软件工程1

    瀑布模型 :最早的一类、适用于需求明确的项目、 结构化 的典型代表 原型模型:先构造一个建议的系统原型再去和用户深入多次交流,不断地根据用户需求进行调整 演化模型:一步步变化,最后得到产品 增量模型:先完成项目的核心功能,然后一步步增加功能 螺旋模型

    2024年02月02日
    浏览(57)
  • 中级软考-软件设计师(三)

    1.netstat -n :可以获取本计算机通过那些端口和外网的IP和端口进行连接; 不能诊断DNS故障 。 state状态: ESTABLISHED:已经建立连接 TIME_WAIT:等待连接 2.SNMP是应用层。 在SNMP协议中,团体名相当于一个组,在进行管理时,是以团体名为单位进行管理的,基作用域也在相同团体名

    2024年02月07日
    浏览(54)
  • 软考:中级软件设计师:大数据

    提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以应对未来更多的可能性 关于互联网大厂的笔试面试,都是需要细心准备的 (1)自己的科研经历, 科研内容 ,学习的相关领域知识,要熟悉熟透了 (2)自己的实习经历,做了 什

    2024年02月11日
    浏览(60)
  • 软考:中级软件设计师:HTML

    提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以应对未来更多的可能性 关于互联网大厂的笔试面试,都是需要细心准备的 (1)自己的科研经历, 科研内容 ,学习的相关领域知识,要熟悉熟透了 (2)自己的实习经历,做了 什

    2024年02月11日
    浏览(42)
  • 中级软考-软件设计师(一)

    1.编译和解释 编译器 不参与运行控制 , 解释器 参与运行控制,程序执行的速度慢 。 编译方式 能生成目标程序, 解释方式 不生成。 2.在CPU中,( 运算器,ALU )在控制器下完成算术和逻辑运算。( 累加寄存器,AC )为ALU提供一个工作区,用来暂存数据。( 程序计数器,

    2024年02月04日
    浏览(44)
  • [软考中级]软件设计师-uml

    uml中有4中事物,结构事物,行为事物,分组事物和注释事物 结构事物是uml模型中的名词,通常是模型的静态部分,描述概念或物理元素 行为事物是uml的动态部分,是模型中的动词,描述了跨越时间和空间的行为 分组事物是uml模型中的组织部分,是一些由模型分解成的盒子,

    2024年02月07日
    浏览(60)
  • 软考中级软件设计师主观题详解

    试题 考察内容 数据流图/DFD 补充外部实体、数据存储、加工、数据流等 数据库设计/ER E-R图 关系模式 主键/外键 规范化理论 增加实体 UML建模 类图 用例图 活动图等 C语言算法 C语法+数据结构 Java/C++ 基础语法+设计模式 名词 解释 外部实体 系统外部现实世界存在的物体 矩形表

    2024年02月03日
    浏览(45)
  • 中级软件设计师备考---程序设计语言和法律法规知识

    Fortran语言: 科学计算 、执行效率高 Pascal语言: 为教学而开发的 、表达能力强,演化出了 Delphi C语言:指针操作能力强、 高效 Lisp语言:函数式程序语言、符号处理、 人工智能 C++语言:面向对象、 高效 Java语言:面向对象、中间代码、 跨平台 C#语言:面向对象、中间代码

    2024年02月03日
    浏览(90)
  • 软考:中级软件设计师:数据库模式、ER模型

    提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以应对未来更多的可能性 关于互联网大厂的笔试面试,都是需要细心准备的 (1)自己的科研经历, 科研内容 ,学习的相关领域知识,要熟悉熟透了 (2)自己的实习经历,做了 什

    2024年02月12日
    浏览(55)
  • 软件设计师_软考中级_下午题笔记(已过)

    数据流图分为顶层数据流图和0层数据流图 顶层数据流图只有一个处理节点即某某系统,顶层数据流图是系统和实体的数据传输表示 0层数据流图是将系统细化 一、数据流图的组成 外部实体(起点,终点) 数据流 处理 数据存储 二、数据流图相关原则 1、顶层图和0层图平衡原则

    2024年02月05日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包