概要
Adapter パターンは、異なるインターフェースの差異を解消する、デザインパターンの一つである。
ソースコード
継承を使ったもの
Banner.m
classdef Banner < handle
properties (Access = private)
string char {mustBeTextScalar} = ''
end
methods (Access = public)
function obj = Banner(string)
arguments (Input)
string char {mustBeTextScalar}
end
arguments (Output)
obj (1,1) Banner
end
obj.string = string;
end
function showWithParen(obj)
arguments (Input)
obj (1,1) Banner
end
disp(['(', obj.string, ')']);
end
function showWithAster(obj)
arguments (Input)
obj (1,1) Banner
end
disp(['*', obj.string, '*']);
end
end
end
Print.m
classdef (Abstract) Print < handle
methods (Abstract)
printWeak(obj)
printStrong(obj)
end
end
PrintBanner.m
classdef PrintBanner < Banner & Print
methods (Access = public)
function obj = PrintBanner(string)
arguments (Input)
string char {mustBeTextScalar}
end
arguments (Output)
obj (1,1) PrintBanner
end
obj = obj@Banner(string);
end
function printWeak(obj)
arguments (Input)
obj (1,1) PrintBanner
end
obj.showWithParen();
end
function printStrong(obj)
arguments (Input)
obj (1,1) PrintBanner
end
obj.showWithAster();
end
end
end
main.m
function main
p = PrintBanner('Hello');
p.printWeak();
p.printStrong();
end
移譲を使ったもの
Banner.m
classdef PrintBanner < Print
properties (Access = private)
banner (1,1) Banner = matlab.lang.invalidHandle('Banner', 1, 1)
end
methods (Access = public)
function obj = PrintBanner(string)
arguments (Input)
string char {mustBeTextScalar}
end
arguments (Output)
obj (1,1) PrintBanner
end
obj.banner = Banner(string);
end
function printWeak(obj)
arguments (Input)
obj (1,1) PrintBanner
end
obj.banner.showWithParen();
end
function printStrong(obj)
arguments (Input)
obj (1,1) PrintBanner
end
obj.banner.showWithAster();
end
end
end
実行結果
>> main
(Hello)
*Hello*