首页 > 其他分享 >设计模式 (2):8 种结构性模式

设计模式 (2):8 种结构性模式

时间:2023-10-15 21:12:28浏览次数:28  
标签:return String Computer 类图 模式 结构性 设计模式 cpt cost

回顾上节:

  • 随着对象种类、属性容量的扩大,创建具体对象、管理属性装配、快速复制等,都面临难题,这时产生了工厂、建造者、原型等设计模式;
  • 单例模式也保护了全局变量,提高了全局访问、使用全局对象和接口的 安全性、规范性、可用性 等等

目录


1 适配器模式 (Adapter)

方法依赖别的接口,但不重载?

这种时候需要适配器模式

  • 定义 适配器,聚合 被适配的接口,实现 需求的接口

类图和代码实现

类图:
适配器模式

代码实现:

class HuaweiComputer implements Computer{
	String readSD(SDCard sd){
		return sd.readSD();
	} // Computer 接口这里就不写了
}
interface SDCard {
	String readSD();
}
interface HardDisk {
	String readHD();
}
class SD2HD_Adapter implements SDCard {
	HardDisk hd;
	@Override
	String readSD(){
		return hd.readHD();
	}
}

2 装饰器模式 (Decorator)

递归引用地 添加 多层功能

增强接口通过装饰器的递归调用实现,而整体的功能增强其实就是链表

类图和代码实现

装饰器模式
测试类:

Computer cpt = new HuaweiComputer();
cpt = new RTX4090(cpt);
cpt = new Memory16G(cpt);
cpt = new Memory16G(cpt);
cpt = new Disk256G(cpt);
System.out.println("总共花费:" + cpt.cost() + "元");
/** 
 * 输出结果:
外加外存:256G || 799 元
外加内存条:16G || 899 元
外加内存条:16G || 899 元
外加显卡:RTX4090 || 7999 元
Huawei基础电脑 || 8999 元
总共花费:19595元
 */

类定义:

class HuaweiComputer implements Computer{
	int cost(){
		System.out.println("Huawei基础电脑 || 8999 元");
		return 8999;
	}
}
class RTX4090 extends ComputerDecorator {
	Computer cpt;
	RTX4090(Computer cpt){
		this.cpt = cpt;
	}
	int cost(){
		System.out.println("外加显卡:RTX4090 || 7999 元");
		return 7999 + cpt.cost();
	}
}
class Memory16G extends ComputerDecorator {
	Computer cpt;
	Memory16G(Computer cpt){
		this.cpt = cpt;
	}
	int cost(){
		System.out.println("外加内存条:16G || 899 元");
		return 899 + cpt.cost();
	}
}
class Disk256G extends ComputerDecorator {
	Computer cpt;
	Disk256G(Computer cpt){
		this.cpt = cpt;
	}
	int cost(){
		System.out.println("外加外存:256G || 799 元");
		return 799 + cpt.cost();
	}
}

3 组合模式

多叉树的聚合

对于不同层级的集合,不定义每一层级的类,而是取它们的共性类作为节点类,建立一颗树,避免了继承和实现,减少了类爆炸

类图和代码实现

类图:略,主要是多叉树的结构

// 员工类
@AllArgumentsConstructor
class Emp {
	String name; // 姓名
	String position; // 职位
	int salary; // 薪水
	ArrayList<Emp> directSublist;// 直接下级
	// 获得员工信息
	public String getCorpInfo() {
		return String.format(
			"姓名: %s 职位: %s 薪水: %d 元", 
			name, position, salary
		);
	}
	// 添加直属下级
	public void addDirectSubEmps(Emp... emps) {
		directSublist.addAll(Arrays.asList(emps));
	}
	// 返回直属下级列表
	public List<AbsEmp> getDirectSubEmps() {
		return directSublist;
	}
}

4 桥接模式

标签:return,String,Computer,类图,模式,结构性,设计模式,cpt,cost
From: https://www.cnblogs.com/luoyicode/p/17766189.html

相关文章

  • Easysearch压缩模式深度比较:ZSTD+source_reuse的优势分析
    引言在使用Easysearch时,如何在存储和查询性能之间找到平衡是一个常见的挑战。Easysearch具备多种压缩模式,各有千秋。本文将重点探讨一种特别的压缩模式:zstd+source_reuse,我们最近重新优化了source_reuse,使得它在吞吐量和存储效率方面都表现出色。测试概览测试条件选用了esr......
  • Easysearch压缩模式深度比较:ZSTD+source_reuse的优势分析
    引言在使用Easysearch时,如何在存储和查询性能之间找到平衡是一个常见的挑战。Easysearch具备多种压缩模式,各有千秋。本文将重点探讨一种特别的压缩模式:zstd+source_reuse,我们最近重新优化了source_reuse,使得它在吞吐量和存储效率方面都表现出色。测试概览测试条件选用了......
  • MPI广播聚合通信模式代码
    #include<mpi.h>#include<stdio.h>#include<unistd.h>intmain(intargc,char**argv){MPI_Init(&argc,&argv);intrank;intsize;MPI_Comm_rank(MPI_COMM_WORLD,&rank);//获取当前进程的rankMPI_Comm_size(MPI_......
  • 线程之间的通信&线程池&设计模式
    day19_线程之间的通信&线程池&设计模式课程目标1.【理解】线程通信概念2.【理解】等待唤醒机制3.【理解】线程池运行原理4.【理解】voliate关键字5.【掌握】单例设计模式线程之间通信什么是线程之间的通信**概念:**多个线程在处理同一个资源,但是处理的动作(线程的任......
  • 原型模式--Java实现
    画类图浅克隆:深克隆:具体代码实现浅克隆具体代码://Vector.javapackageorg.example.design004;importjava.lang.reflect.Array;importjava.util.Arrays;publicclassVectorimplementsCloneable{publicint[]getArray(){returnarray;}......
  • .Net实现深色模式窗口
    深色模式窗口实现原理是遍历窗口的所有子控件,将子控件的字体颜色和背景色修改为深色模式,代码为:publicstaticvoiddarkSubs(Controlui){foreach(varobjinui.Controls){if(objisButtonbtn)d......
  • 设计模式总和
            ......
  • 访问者模式
            ......
  • GoF之工厂模式
    工厂模式通常有三种形态第一种:简单工厂模式(SimpleFactory):不属于23中设计模式。简单工厂模式又叫做:静态工厂方法模式。简单工厂模式是工厂模式的一种特殊实现。第二种:工厂方法模式(FactoryMethod):是23种设计模式之一。第三种:抽象工厂模式(AbstractFactory):是23种设计模式之一。(随......
  • 模板方法模式
      ......