设计原则之开闭原则(实例加UML完整例子)

java设计原则

1.开放-封闭原则

1.1 定义

  对拓展开放,对修改关闭:比如当某个业务增加,不是在原类增加方法,而是增加原类的实现类

1.2 UML类图

在这里插入图片描述

1.3 设计背景

  以银行业务为例:

/**
 * @author tbb
 *      银行业务类
 */
public class BankingBusiness 
{
	public void bankSavings()
	{
		System.out.println("存款");
	}
	
	public void drawMoney ()
	{
		System.out.println("取款");
	}
	
	public void transferAccounts()
	{
		System.out.println("转账");
	}
}

/**
 * @author tbb
 *      客户类
 */
public class Client 
{
    /**
               * 行为类型
     */
    private String actionType;

	public String getActionType() {
		return actionType;
	}

	public void setActionType(String actionType) {
		this.actionType = actionType;
	}

	public Client(String actionType) {
		super();
		this.actionType = actionType;
	}
	
}
public class Test
{
    public static void main(String[] args) 
    {
		Client client = new Client("存款");//客户想去银行存款
		BankingBusiness bankingBusiness = new BankingBusiness();
		switch (client.getActionType())
		{
		    case "存款" :bankingBusiness.bankSavings(); break;
		    case "取款" :bankingBusiness.drawMoney();; break;
		    case "转账" :bankingBusiness.transferAccounts();; break;
		    default:break;
		}
		

		
	}
}

  这设计显然是存在问题的,目前设计中就只有存款,取款和转账三个功能,将来如果业务增加了,比如增加理财功能等,就必须要修改BankProcess业务类。我们分析上述设计当有新的需求发生,必须修改现有代码则违反了开放封闭原则

1.4 实现思路

  为达到目的,需对系统进行抽象化设计:象上述存款、取款、转账、理财等行为,可以抽象为银行业务行为。

1.5 实现场景
/**
 * @author tbb
  *     银行业务接口类
 */
public interface BankingBusiness 
{
	public void business();//业务
}
/**
 * @author tbb
 *      存款业务类
 */
public class BankSavings implements BankingBusiness
{

	@Override
	public void business() 
	{
		System.out.println("存款");
	}

}
/**
 * @author tbb
 *      取款业务类
 */
public class DrawMoney implements BankingBusiness
{

	@Override
	public void business() 
	{
       System.out.println("取款");		
	}

}

/**
 * @author tbb
 *       转账业务类
 */
public class TransferAccounts implements BankingBusiness
{

	@Override
	public void business() 
	{
		System.out.println("转账");
	}
}

/**
 * @author tbb
 *      理财业务类
 */
public class ManageMoneyMatters implements BankingBusiness
{

	@Override
	public void business() 
	{
		System.out.println("理财");
	}

}
/**
 * @author tbb
 *      客户类
 */
public class Client 
{
    /**
               * 行为类型
     */
    private String actionType;

	public String getActionType() {
		return actionType;
	}

	public void setActionType(String actionType) {
		this.actionType = actionType;
	}

	public Client(String actionType) {
		super();
		this.actionType = actionType;
	}
	
}
public class Test
{
    public static void main(String[] args) 
    {
		Client client = new Client("理财");
		BankSavings bankSavings = new BankSavings();
		ManageMoneyMatters manageMoneyMatters = new ManageMoneyMatters();
		TransferAccounts transferAccounts = new TransferAccounts();
		DrawMoney drawMoney = new DrawMoney();
		switch (client.getActionType())
		{
		    case "存款" :bankSavings.business(); break;
		    case "取款" :drawMoney.business(); break;
		    case "转账" :transferAccounts.business(); break;
		    case "理财" :manageMoneyMatters.business(); break;
		    default:break;
		}
		
	}
}
  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UML(Unified Modeling Language)是一种用于软件系统设计和分析的标准化建模语言。在软件开发过程中,UML可以帮助软件工程师和开发团队更好地理解和分析系统的需求和设计。下面我将给出一个完整UML分析与设计实例。 假设我们正在开发一个在线商城系统。首先,我们需要进行需求分析,确定系统的功能需求和用户需求。然后,我们可以使用UML中的用例图来描述系统的功能,例如用户注册、浏览商品、添购物车、结算等。 接下来,我们可以使用UML中的类图来分析系统的类和对象之间的关系。在我们的在线商城系统中,可能会有用户类、商品类、订单类等。同时,我们可以使用UML中的时序图来描述系统中不同类之间的交互和消息传递。 在设计阶段,我们可以使用UML中的活动图来描述系统中的业务流程,例如用户下单的流程、商品库存管理的流程等。同时,我们可以使用UML中的状态图来描述系统中对象的状态转换,比如订单的状态转换。 最后,在实现阶段,我们可以使用UML中的部署图来描述系统如何部署在硬件设备上,例如Web服务器、数据库服务器等的部署。除此之外,我们还可以使用UML中的包图、组件图等来描述系统的结构和组件之间的关系。 通过上面的示例,我们可以看到在整个软件开发过程中,UML可以帮助我们更好地理解和分析系统的需求,并且帮助我们设计出更健壮和可靠的软件系统。 UML的使用可以提高开发效率,降低开发成本,在实际的软件开发中具有非常重要的作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值