组合模式
- 应用模块:商品展示模块中,商品可能存在层级结构,如商品分类下有子分类,子分类下再有具体商品。可将商品分类和商品视为组合结构中的对象。
- 好处:
- 提高可扩展性:方便新增商品分类或商品,只需按照组合模式的结构添加新节点即可。
- 增强可维护性:对于整个商品层级结构的操作(如遍历展示)可以统一处理,代码更简洁易维护。
- 关键代码示例:
// 抽象组件
abstract class Component {
protected String name;
public Component(String name) {
this.name = name;
}
public abstract void display();
}
// 叶子节点(具体商品)
class Leaf extends Component {
public Leaf(String name) {
super(name);
}
@Override
public void display() {
System.out.println("商品: " + name);
}
}
// 组合节点(商品分类)
class Composite extends Component {
private List<Component> children = new ArrayList<>();
public Composite(String name) {
super(name);
}
public void add(Component component) {
children.add(component);
}
public void remove(Component component) {
children.remove(component);
}
@Override
public void display() {
System.out.println("商品分类: " + name);
for (Component child : children) {
child.display();
}
}
}
桥接模式
- 应用模块:订单处理模块中,订单可能有不同的支付方式(如支付宝、微信支付)以及不同的订单类型(如普通订单、团购订单)。可以将支付方式和订单类型分离,用桥接模式连接。
- 好处:
- 提高可扩展性:当新增支付方式或订单类型时,不需要修改现有类的结构,只需新增对应的实现类。
- 增强可维护性:支付方式和订单类型的变化相互独立,代码结构更清晰,便于维护。
- 关键代码示例:
// 抽象化角色
abstract class Order {
protected Payment payment;
public Order(Payment payment) {
this.payment = payment;
}
public abstract void processOrder();
}
// 扩充抽象化角色(普通订单)
class NormalOrder extends Order {
public NormalOrder(Payment payment) {
super(payment);
}
@Override
public void processOrder() {
System.out.println("处理普通订单,使用");
payment.pay();
}
}
// 实现化角色
interface Payment {
void pay();
}
// 具体实现化角色(支付宝支付)
class AlipayPayment implements Payment {
@Override
public void pay() {
System.out.println("支付宝支付");
}
}
其他结构型模式可应用场景及好处(以装饰器模式为例)
- 应用模块:用户管理模块中,可能需要对用户权限进行动态添加或移除。例如,普通用户可以动态获得管理员权限的一些功能。
- 好处:
- 提高可扩展性:方便为用户动态添加或移除权限,符合开闭原则。
- 增强可维护性:权限管理逻辑与用户核心逻辑分离,使得代码更易于理解和维护。
- 关键代码示例:
// 抽象组件(用户)
abstract class User {
public abstract void showPermissions();
}
// 具体组件(普通用户)
class NormalUser extends User {
@Override
public void showPermissions() {
System.out.println("普通用户权限");
}
}
// 抽象装饰器
abstract class UserDecorator extends User {
protected User decoratedUser;
public UserDecorator(User decoratedUser) {
this.decoratedUser = decoratedUser;
}
}
// 具体装饰器(添加管理员权限)
class AdminPrivilegeDecorator extends UserDecorator {
public AdminPrivilegeDecorator(User decoratedUser) {
super(decoratedUser);
}
@Override
public void showPermissions() {
decoratedUser.showPermissions();
System.out.println("额外的管理员权限");
}
}