首页 > 其他分享 >外观模式

外观模式

时间:2022-09-21 16:12:10浏览次数:55  
标签:外观 TV Light fmt 模式 Println func facade

外观模式

电器接口

package facade

type Electrical interface {
	On()
	Off()
}

电视机

package facade

import "fmt"

type TV struct{}

func NewTV() *TV {
	return &TV{}
}

func (t *TV) On() {
	fmt.Println("打开电视!")
}

func (t *TV) Off() {
	fmt.Println("关闭电视!")
}

func (t *TV) UpSound() {
	fmt.Println("将声音调整到20")
}

电灯

package facade

import "fmt"

type Light struct{}

func NewLight() *Light {
	return &Light{}
}

func (l *Light) On() {
	fmt.Println("打开电灯!")
}

func (l *Light) Off() {
	fmt.Println("关闭电灯!")
}

func (l *Light) Auto() {
	fmt.Println("自动调节亮度")
}

外观接口

package facade

type facade interface {
	work(string)
}

智能家居系统

package facade

type system struct {
	tv    *TV
	light *Light
}

func NewFacade() facade {
	return &system{
		tv:    NewTV(),
		light: NewLight(),
	}
}

func (s *system) work(msg string) {
	switch msg {
	case "打开":
		s.tv.On()
		s.tv.UpSound()
		s.light.On()
		s.light.Auto()
	case "关闭":
		s.tv.Off()
		s.light.Off()
	default:
		fmt.Println("主人,请输入正确指令!")
	}
}  

测试文件

package facade

func TestFacade(t *testing.T) {
	fac := NewFacade()
	fac.work("打开")
	fmt.Println("**********************")
	fac.work("关闭")

}

标签:外观,TV,Light,fmt,模式,Println,func,facade
From: https://www.cnblogs.com/mathsmouse/p/16715936.html

相关文章

  • 桥接模式
    理论桥接模式(Bridge),将抽象部分与它的实现部分分离,使它们都可以独立地变化。这里地抽象与它的实现分离,并不是说让抽象类与其派生类分离,因为这没有任何意义。实现指的是抽......
  • 使用 react-spring 开发一个智能暗模式切换按钮
    最近,我重写了博客右上角的深色模式切换按钮。为此,我也学会了学习Figma。虽然技术不难,但收获不少。至少我可以根据猫和老虎设计一些简单的SVG图形。废话不多说,介绍一下我......
  • JAVA进阶--XML、XML解析、XPath、设计模式--2022年9月19日
    第一节1、XML是什么?XML的全称为(EXtensibleMarkupLanguage),是一种可扩展的标记语言它是一种数据表示格式,可以用于自定义数据格式2、......
  • 设计模式---建造者模式
    概要设计模式类型:创建型目标问题:创建对象时,参数设置的灵活性问题。(具体看案例)接下来我们看一个需要改进的案例。对象创建的优化现在有个Employee类,你能预想到在开......
  • rabbitmq模式 routing
    rabbitmq模式routingemit_log_direct.php<?phprequire_once__DIR__.'/../../vendor/autoload.php';usePhpAmqpLib\Connection\AMQPStreamConnection;usePhpAm......
  • rabbitmq模式 publish subscribe
    rabbitmq模式publishsubscribeemit_log.php<?phprequire_once__DIR__.'/../../vendor/autoload.php';usePhpAmqpLib\Connection\AMQPStreamConnection;usePh......
  • rabbitmq模式 RPC
    rabbitmq模式RPCrpc_server.php<?phprequire_once__DIR__.'/../../vendor/autoload.php';usePhpAmqpLib\Connection\AMQPStreamConnection;usePhpAmqpLib\Mes......
  • rabbitmq模式 topics
    rabbitmq模式topicsemit_log_topic.php<?phprequire_once__DIR__.'/../../vendor/autoload.php';usePhpAmqpLib\Connection\AMQPStreamConnection;usePhpAmqp......
  • 单例模式
    理论单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式的好处:单例模式因为Singleton类封装它的唯一实例,这样它可以严格地控制客户怎......
  • Java单例模式
    单例模式  单例模式核心是保证一个类只有一个实例,并且提供一个访问实例的全局访问点。使用场景  需要频繁的进行创建和销毁的对象、创建对象时耗时过多或耗费资源过......