{"id":279,"date":"2023-10-03T21:32:31","date_gmt":"2023-10-03T19:32:31","guid":{"rendered":"https:\/\/pawel-majchrzak.profesjonalnyprogramista.pl\/?page_id=279"},"modified":"2023-10-03T22:43:34","modified_gmt":"2023-10-03T20:43:34","slug":"state","status":"publish","type":"page","link":"https:\/\/pawel-majchrzak.profesjonalnyprogramista.pl\/index.php\/blog\/state\/","title":{"rendered":"State"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"279\" class=\"elementor elementor-279\">\n\t\t\t\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-096df44 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"096df44\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-794d2b7\" data-id=\"794d2b7\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-df90595 elementor-widget elementor-widget-heading\" data-id=\"df90595\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>\/*! elementor - v3.18.0 - 20-12-2023 *\/\n.elementor-heading-title{padding:0;margin:0;line-height:1}.elementor-widget-heading .elementor-heading-title[class*=elementor-size-]>a{color:inherit;font-size:inherit;line-height:inherit}.elementor-widget-heading .elementor-heading-title.elementor-size-small{font-size:15px}.elementor-widget-heading .elementor-heading-title.elementor-size-medium{font-size:19px}.elementor-widget-heading .elementor-heading-title.elementor-size-large{font-size:29px}.elementor-widget-heading .elementor-heading-title.elementor-size-xl{font-size:39px}.elementor-widget-heading .elementor-heading-title.elementor-size-xxl{font-size:59px}<\/style><h2 class=\"elementor-heading-title elementor-size-default\">Stan State<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-ee15b5e elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"ee15b5e\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-416332d\" data-id=\"416332d\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b78b603 elementor-position-right elementor-widget__width-initial elementor-vertical-align-middle elementor-widget elementor-widget-image-box\" data-id=\"b78b603\" data-element_type=\"widget\" data-widget_type=\"image-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>\/*! elementor - v3.18.0 - 20-12-2023 *\/\n.elementor-widget-image-box .elementor-image-box-content{width:100%}@media (min-width:768px){.elementor-widget-image-box.elementor-position-left .elementor-image-box-wrapper,.elementor-widget-image-box.elementor-position-right .elementor-image-box-wrapper{display:flex}.elementor-widget-image-box.elementor-position-right .elementor-image-box-wrapper{text-align:right;flex-direction:row-reverse}.elementor-widget-image-box.elementor-position-left .elementor-image-box-wrapper{text-align:left;flex-direction:row}.elementor-widget-image-box.elementor-position-top .elementor-image-box-img{margin:auto}.elementor-widget-image-box.elementor-vertical-align-top .elementor-image-box-wrapper{align-items:flex-start}.elementor-widget-image-box.elementor-vertical-align-middle .elementor-image-box-wrapper{align-items:center}.elementor-widget-image-box.elementor-vertical-align-bottom .elementor-image-box-wrapper{align-items:flex-end}}@media (max-width:767px){.elementor-widget-image-box .elementor-image-box-img{margin-left:auto!important;margin-right:auto!important;margin-bottom:15px}}.elementor-widget-image-box .elementor-image-box-img{display:inline-block}.elementor-widget-image-box .elementor-image-box-title a{color:inherit}.elementor-widget-image-box .elementor-image-box-wrapper{text-align:center}.elementor-widget-image-box .elementor-image-box-description{margin:0}<\/style><div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><img decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/pawel-majchrzak.profesjonalnyprogramista.pl\/wp-content\/uploads\/2023\/10\/stage-150x150.png\" class=\"attachment-thumbnail size-thumbnail wp-image-223\" alt=\"\" srcset=\"https:\/\/pawel-majchrzak.profesjonalnyprogramista.pl\/wp-content\/uploads\/2023\/10\/stage-150x150.png 150w, https:\/\/pawel-majchrzak.profesjonalnyprogramista.pl\/wp-content\/uploads\/2023\/10\/stage-300x300.png 300w, https:\/\/pawel-majchrzak.profesjonalnyprogramista.pl\/wp-content\/uploads\/2023\/10\/stage.png 512w\" sizes=\"(max-width: 150px) 100vw, 150px\" \/><\/figure><div class=\"elementor-image-box-content\"><h3 class=\"elementor-image-box-title\">Do czego s\u0142u\u017cy State?<\/h3><p class=\"elementor-image-box-description\">Jest to behawioralny wzorzec projektowy. Stan pozwala uzale\u017cni\u0107 zachowanie obiektu od stanu w kt\u00f3rym si\u0119 znajduje.<br>\nStw\u00f3rzmy przyk\u0142adowy program CD Player, aby uchwyci\u0107 istot\u0119 wzorca State. Aplikacja s\u0142u\u017cy do odtwarzania muzyki z p\u0142yty CD. Aby to uczyni\u0107 trzeba wykona\u0107 wszystkie 3 akcje w odpowiedniej kolejno\u015bci:<br>\n- w\u0142o\u017cy\u0107 p\u0142yt\u0119,<br>\n- wybra\u0107 utw\u00f3r,<br>\n- w\u0142\u0105czy\u0107 start.<br>\n<\/p><\/div><\/div>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-d5d2fd4 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"d5d2fd4\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-de475b9\" data-id=\"de475b9\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b8a5c96 elementor-position-left elementor-vertical-align-middle elementor-view-default elementor-mobile-position-top elementor-widget elementor-widget-icon-box\" data-id=\"b8a5c96\" data-element_type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<link rel=\"stylesheet\" href=\"https:\/\/pawel-majchrzak.profesjonalnyprogramista.pl\/wp-content\/plugins\/elementor\/assets\/css\/widget-icon-box.min.css\">\t\t<div class=\"elementor-icon-box-wrapper\">\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon elementor-animation-\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-music\"><\/i>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t<span  >\n\t\t\t\t\t\tPrzyk\u0142adowy program CD Player\t\t\t\t\t<\/span>\n\t\t\t\t<\/h3>\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tW programie utworzy\u0142em klas\u0119 CD_Player, a w niej powy\u017csze trzy metody: w\u0142\u00f3\u017c p\u0142yt\u0119 (insertCD), wybierz utw\u00f3r (selectTrack) oraz naci\u015bnij start (pressStart).<br>\nAby pos\u0142ucha\u0107 utworu z dysku CD wystarczy utworzy\u0107 obiekt cd_Player i wywo\u0142a\u0107 kolejno te metody.\t\t\t\t\t<\/p>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-f2c0296 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"f2c0296\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-3a5d20f\" data-id=\"3a5d20f\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-ebd01a4 elementor-tabs-alignment-stretch elementor-tabs-view-horizontal elementor-widget elementor-widget-tabs\" data-id=\"ebd01a4\" data-element_type=\"widget\" data-widget_type=\"tabs.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>\/*! elementor - v3.18.0 - 20-12-2023 *\/\n.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs-wrapper{width:25%;flex-shrink:0}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active{border-right-style:none}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:after,.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:before{height:999em;width:0;right:0;border-right-style:solid}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:before{top:0;transform:translateY(-100%)}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:after{top:100%}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title{display:table-cell}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active{border-bottom-style:none}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:after,.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:before{bottom:0;height:0;width:999em;border-bottom-style:solid}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:before{right:100%}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:after{left:100%}.elementor-widget-tabs .elementor-tab-content,.elementor-widget-tabs .elementor-tab-title,.elementor-widget-tabs .elementor-tab-title:after,.elementor-widget-tabs .elementor-tab-title:before,.elementor-widget-tabs .elementor-tabs-content-wrapper{border:1px #d5d8dc}.elementor-widget-tabs .elementor-tabs{text-align:left}.elementor-widget-tabs .elementor-tabs-wrapper{overflow:hidden}.elementor-widget-tabs .elementor-tab-title{cursor:pointer;outline:var(--focus-outline,none)}.elementor-widget-tabs .elementor-tab-desktop-title{position:relative;padding:20px 25px;font-weight:700;line-height:1;border:solid transparent}.elementor-widget-tabs .elementor-tab-desktop-title.elementor-active{border-color:#d5d8dc}.elementor-widget-tabs .elementor-tab-desktop-title.elementor-active:after,.elementor-widget-tabs .elementor-tab-desktop-title.elementor-active:before{display:block;content:\"\";position:absolute}.elementor-widget-tabs .elementor-tab-desktop-title:focus-visible{border:1px solid #000}.elementor-widget-tabs .elementor-tab-mobile-title{padding:10px;cursor:pointer}.elementor-widget-tabs .elementor-tab-content{padding:20px;display:none}@media (max-width:767px){.elementor-tabs .elementor-tab-content,.elementor-tabs .elementor-tab-title{border-style:solid solid none}.elementor-tabs .elementor-tabs-wrapper{display:none}.elementor-tabs .elementor-tabs-content-wrapper{border-bottom-style:solid}.elementor-tabs .elementor-tab-content{padding:10px}}@media (min-width:768px){.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs{display:flex}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs-wrapper{flex-direction:column}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs-content-wrapper{flex-grow:1;border-style:solid solid solid none}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-content{border-style:none solid solid}.elementor-widget-tabs.elementor-tabs-alignment-center .elementor-tabs-wrapper,.elementor-widget-tabs.elementor-tabs-alignment-end .elementor-tabs-wrapper,.elementor-widget-tabs.elementor-tabs-alignment-stretch .elementor-tabs-wrapper{display:flex}.elementor-widget-tabs.elementor-tabs-alignment-center .elementor-tabs-wrapper{justify-content:center}.elementor-widget-tabs.elementor-tabs-alignment-end .elementor-tabs-wrapper{justify-content:flex-end}.elementor-widget-tabs.elementor-tabs-alignment-stretch.elementor-tabs-view-horizontal .elementor-tab-title{width:100%}.elementor-widget-tabs.elementor-tabs-alignment-stretch.elementor-tabs-view-vertical .elementor-tab-title{height:100%}.elementor-tabs .elementor-tab-mobile-title{display:none}}<\/style>\t\t<div class=\"elementor-tabs\">\n\t\t\t<div class=\"elementor-tabs-wrapper\" role=\"tablist\" >\n\t\t\t\t\t\t\t\t\t<div id=\"elementor-tab-title-2471\" class=\"elementor-tab-title elementor-tab-desktop-title\" aria-selected=\"true\" data-tab=\"1\" role=\"tab\" tabindex=\"0\" aria-controls=\"elementor-tab-content-2471\" aria-expanded=\"false\">main.java<\/div>\n\t\t\t\t\t\t\t\t\t<div id=\"elementor-tab-title-2472\" class=\"elementor-tab-title elementor-tab-desktop-title\" aria-selected=\"false\" data-tab=\"2\" role=\"tab\" tabindex=\"-1\" aria-controls=\"elementor-tab-content-2472\" aria-expanded=\"false\">CD_Player .java<\/div>\n\t\t\t\t\t\t\t\t\t<div id=\"elementor-tab-title-2473\" class=\"elementor-tab-title elementor-tab-desktop-title\" aria-selected=\"false\" data-tab=\"3\" role=\"tab\" tabindex=\"-1\" aria-controls=\"elementor-tab-content-2473\" aria-expanded=\"false\">Wyj\u015bcie wiersza polece\u0144:<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t<div class=\"elementor-tabs-content-wrapper\" role=\"tablist\" aria-orientation=\"vertical\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-tab-title elementor-tab-mobile-title\" aria-selected=\"true\" data-tab=\"1\" role=\"tab\" tabindex=\"0\" aria-controls=\"elementor-tab-content-2471\" aria-expanded=\"false\">main.java<\/div>\n\t\t\t\t\t<div id=\"elementor-tab-content-2471\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"1\" role=\"tabpanel\" aria-labelledby=\"elementor-tab-title-2471\" tabindex=\"0\" hidden=\"false\"><p>public class Main {<br \/>\u00a0\u00a0\u00a0 public static void main(String[] args) {<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 CD_Player cd_player = new CD_Player();<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 cd_player.insertCD();<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 cd_player.selectTrack();<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 cd_player.pressStart();<br \/>\u00a0\u00a0\u00a0 }<br \/>}<\/p><\/div>\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-tab-title elementor-tab-mobile-title\" aria-selected=\"false\" data-tab=\"2\" role=\"tab\" tabindex=\"-1\" aria-controls=\"elementor-tab-content-2472\" aria-expanded=\"false\">CD_Player .java<\/div>\n\t\t\t\t\t<div id=\"elementor-tab-content-2472\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"2\" role=\"tabpanel\" aria-labelledby=\"elementor-tab-title-2472\" tabindex=\"0\" hidden=\"hidden\"><p>public class CD_Player {<br \/>\u00a0\u00a0\u00a0 public void insertCD () {<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 System.<em>out<\/em>.println(&#8222;W\u0142o\u017cono p\u0142yt\u0119 CD&#8221;);<br \/>\u00a0\u00a0\u00a0 }<br \/>\u00a0\u00a0\u00a0 public void selectTrack () {<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 System.<em>out<\/em>.println(&#8222;Wybrano utw\u00f3r&#8221;);<br \/>\u00a0\u00a0\u00a0 }<br \/>\u00a0\u00a0\u00a0 public void pressStart() {<br \/>\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0System.<em>out<\/em>.println(&#8222;Zagrano utw\u00f3r&#8221;);<br \/>\u00a0\u00a0\u00a0 }<br \/>}<\/p><\/div>\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-tab-title elementor-tab-mobile-title\" aria-selected=\"false\" data-tab=\"3\" role=\"tab\" tabindex=\"-1\" aria-controls=\"elementor-tab-content-2473\" aria-expanded=\"false\">Wyj\u015bcie wiersza polece\u0144:<\/div>\n\t\t\t\t\t<div id=\"elementor-tab-content-2473\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"3\" role=\"tabpanel\" aria-labelledby=\"elementor-tab-title-2473\" tabindex=\"0\" hidden=\"hidden\"><p>W\u0142o\u017cono p\u0142yt\u0119 CD<\/p><p>Wybrano utw\u00f3r<\/p><p>Zagrano utw\u00f3r<\/p><\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-df9bc29 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"df9bc29\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-dcd5bcf\" data-id=\"dcd5bcf\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-abb60b5 elementor-position-right elementor-vertical-align-middle elementor-view-default elementor-mobile-position-top elementor-widget elementor-widget-icon-box\" data-id=\"abb60b5\" data-element_type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon elementor-animation-\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-sort-amount-down-alt\"><\/i>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t<span  >\n\t\t\t\t\t\tKolejno\u015b\u0107 ma znaczenie\t\t\t\t\t<\/span>\n\t\t\t\t<\/h3>\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tWszystko zgodnie z zak\u0142adan\u0105 kolejno\u015bci\u0105, jednak\u017ce my nie mo\u017cemy zak\u0142ada\u0107, \u017ce u\u017cytkownik b\u0119dzie wiedzia\u0142  w jakiej kolejno\u015bci ma wykona\u0107 te metody aby odtworzy\u0107 utw\u00f3r z p\u0142yty. Gdy wykonamy te metody w innej kolejno\u015bci, to w odpowiedzi nic si\u0119 nie zmieni, a powinno. Gdy klikniemy start, gdy niema w odtwarzaczu dysku CD powinni\u015bmy dosta\u0107 inny komunikat, ni\u017c gdy robimy to w odpowiedniej kolejno\u015bci. <br>\nAby to osi\u0105gn\u0105\u0107 dodajemy enuma: State, kt\u00f3ry przyjmuje ka\u017cdy ze stan\u00f3w:\nNO_CD, CD_INSERTED, TRACK_SELECTED, TRACK_PLAYS. <br>\nNast\u0119pnie w ka\u017cdej z metod u\u017cywamy State w po\u0142\u0105czeniu ze switch\u2019em. Ze wzgl\u0119du na stan (State) wybierany jest odpowiedni komunikat. Robimy switch\u2019a dla ka\u017cdej w metod, w ka\u017cdym z nich rozpatrujemy ka\u017cdy stan. \u0141atwo policzy\u0107, \u017ce w naszym przyk\u0142adzie, trzeba rozpatrzy\u0107 3x4=12 mo\u017cliwo\u015bci. Poni\u017cej pokazuj\u0119 zmienion\u0105 klas\u0119 CD_Player:\n\t\t\t\t\t<\/p>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-95ed50f elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"95ed50f\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>\/*! elementor - v3.18.0 - 20-12-2023 *\/\n.elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap{background-color:#69727d;color:#fff}.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap{color:#69727d;border:3px solid;background-color:transparent}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap{margin-top:8px}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap-letter{width:1em;height:1em}.elementor-widget-text-editor .elementor-drop-cap{float:left;text-align:center;line-height:1;font-size:50px}.elementor-widget-text-editor .elementor-drop-cap-letter{display:inline-block}<\/style>\t\t\t\t<p>public class CD_Player {<br \/>\u00a0\u00a0\u00a0 State state;<br \/>\u00a0\u00a0\u00a0 public CD_Player() {<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 state=State.<em>NO_CD<\/em>;<br \/>\u00a0\u00a0\u00a0 }<br \/>\u00a0\u00a0\u00a0 public void insertCD () {<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 switch (state) {<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 case <em>NO_CD<\/em>:<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 System.<em>out<\/em>.println(&#8222;W\u0142o\u017cono p\u0142yt\u0119 CD&#8221;);<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 state = State.<em>CD_INSERTED<\/em>;<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 break;<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 case <em>CD_INSERTED<\/em>:<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 case <em>TRACK_SELECTED<\/em>:<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 case <em>TRACK_PLAYS<\/em>:<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 System.<em>out<\/em>.println(&#8222;Nie wk\u0142adaj p\u0142yty, p\u0142yta ju\u017c jest&#8221;);<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0break;<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<br \/>\u00a0\u00a0\u00a0 }<br \/>\u00a0\u00a0\u00a0 public void selectTrack () {<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 switch (state) {<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 case <em>NO_CD<\/em>:<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 System.<em>out<\/em>.println(&#8222;Brak p\u0142yty CD&#8221;);<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 break;<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 case <em>CD_INSERTED<\/em>:<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 System.<em>out<\/em>.println(&#8222;Wybrano utw\u00f3r&#8221;);<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 state = State.<em>TRACK_SELECTED<\/em>;<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 break;<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 case <em>TRACK_SELECTED<\/em>:<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 case <em>TRACK_PLAYS<\/em>:<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 System.<em>out<\/em>.println(&#8222;Nie wybieraj znowu, wybrano ju\u017c utw\u00f3r&#8221;);<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 break;<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<br \/>\u00a0\u00a0\u00a0 }<br \/>\u00a0\u00a0\u00a0 public void pressStart() {<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 switch (state) {<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 case <em>NO_CD<\/em>:<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 System.<em>out<\/em>.println(&#8222;Brak p\u0142yty CD&#8221;);<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 break;<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 case <em>CD_INSERTED<\/em>:<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 System.<em>out<\/em>.println(&#8222;Nie wybrano utworu&#8221;);<br \/>\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0break;<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 case <em>TRACK_SELECTED<\/em>:<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 System.<em>out<\/em>.println(&#8222;Zagrano utw\u00f3r&#8221;);<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 state = State.<em>TRACK_PLAYS<\/em>;<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 break;<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 case <em>TRACK_PLAYS<\/em>:<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 System.<em>out<\/em>.println(&#8222;Nie trzeba klika\u0107 dwa razy, muzyka ju\u017c gra&#8221;);<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 break;<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<br \/>\u00a0\u00a0\u00a0 }<br \/>\u00a0\u00a0\u00a0 public enum State {<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <em>NO_CD<\/em>, <em>CD_INSERTED<\/em>, <em>TRACK_SELECTED<\/em>, <em>TRACK_PLAYS<br \/>\u00a0\u00a0\u00a0 <\/em>}<br \/>}<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c0a56b6 elementor-position-right elementor-vertical-align-middle elementor-view-default elementor-mobile-position-top elementor-widget elementor-widget-icon-box\" data-id=\"c0a56b6\" data-element_type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon elementor-animation-\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-question\"><\/i>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t<span  >\n\t\t\t\t\t\t\"Powinno dzia\u0142a\u0107, gdy b\u0119d\u0105 zmiany, p\u00f3\u017aniej b\u0119dziemy si\u0119 martwi\u0107\"\t\t\t\t\t<\/span>\n\t\t\t\t<\/h3>\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tJak Tobie to wygl\u0105da?  P\u00f3ki co, nie wygl\u0105da to \u017ale, no ale pomy\u015blmy co trzeba by zrobi\u0107, gdyby\u015bmy chcieli obs\u0142u\u017cy\u0107 dodatkow\u0105 akcje, np. \u201ewycisz\u201d. Trzeba by na pewno zaimplementowa\u0107 kolejn\u0105 metod\u0119 i obs\u0142u\u017cy\u0107 wszystkie 3 stany oraz doda\u0107 nowy stan. Poza tym w istniej\u0105cych metodach, trzeba b\u0119dzie obs\u0142u\u017cy\u0107 kolejny case. P\u00f3ki mamy kilka akcji i stan\u00f3w, to jest to do zrobienia, gorzej b\u0119dzie gdy tych stan\u00f3w lub akcji b\u0119dzie kilkana\u015bcie lub kilkadziesi\u0105t. W\u00f3wczas \u0142atwo b\u0119dzie si\u0119 pomyli\u0107, o czym\u015b zapomnie\u0107. Naprzeciw takim problemom wychodzi w\u0142a\u015bnie State.\t\t\t\t\t<\/p>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-cbcee2e elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"cbcee2e\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-94386f0\" data-id=\"94386f0\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-149a8c9 elementor-widget elementor-widget-heading\" data-id=\"149a8c9\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Stan State - uproszczony schemat dzia\u0142ania<\/h3>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5ac723b elementor-widget__width-initial elementor-position-top elementor-widget elementor-widget-image-box\" data-id=\"5ac723b\" data-element_type=\"widget\" data-widget_type=\"image-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1217\" height=\"617\" src=\"https:\/\/pawel-majchrzak.profesjonalnyprogramista.pl\/wp-content\/uploads\/2023\/10\/stateSchem.png\" class=\"attachment-full size-full wp-image-301\" alt=\"\" srcset=\"https:\/\/pawel-majchrzak.profesjonalnyprogramista.pl\/wp-content\/uploads\/2023\/10\/stateSchem.png 1217w, https:\/\/pawel-majchrzak.profesjonalnyprogramista.pl\/wp-content\/uploads\/2023\/10\/stateSchem-300x152.png 300w, https:\/\/pawel-majchrzak.profesjonalnyprogramista.pl\/wp-content\/uploads\/2023\/10\/stateSchem-1024x519.png 1024w, https:\/\/pawel-majchrzak.profesjonalnyprogramista.pl\/wp-content\/uploads\/2023\/10\/stateSchem-768x389.png 768w\" sizes=\"(max-width: 1217px) 100vw, 1217px\" \/><\/figure><div class=\"elementor-image-box-content\"><p class=\"elementor-image-box-description\">Na pocz\u0105tku tworzymy klasy dla ka\u017cdego stanu. Nast\u0119pnie tworzymy interfejs State, kt\u00f3ry implementujemy w ka\u017cdej klasie. Do interfejsu dodajemy ka\u017cd\u0105 akcj\u0119, dzi\u0119ki temu nic nie zapomnimy, poniewa\u017c kompilator wymusi nam implementacj\u0119 ka\u017cdej akcji w ka\u017cdym stanie. <\/p><\/div><\/div>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-14427e2 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"14427e2\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-ea8e994\" data-id=\"ea8e994\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2b7d59a elementor-tabs-alignment-stretch elementor-tabs-view-horizontal elementor-widget elementor-widget-tabs\" data-id=\"2b7d59a\" data-element_type=\"widget\" data-widget_type=\"tabs.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-tabs\">\n\t\t\t<div class=\"elementor-tabs-wrapper\" role=\"tablist\" >\n\t\t\t\t\t\t\t\t\t<div id=\"elementor-tab-title-4561\" class=\"elementor-tab-title elementor-tab-desktop-title\" aria-selected=\"true\" data-tab=\"1\" role=\"tab\" tabindex=\"0\" aria-controls=\"elementor-tab-content-4561\" aria-expanded=\"false\">main.java<\/div>\n\t\t\t\t\t\t\t\t\t<div id=\"elementor-tab-title-4562\" class=\"elementor-tab-title elementor-tab-desktop-title\" aria-selected=\"false\" data-tab=\"2\" role=\"tab\" tabindex=\"-1\" aria-controls=\"elementor-tab-content-4562\" aria-expanded=\"false\">State.java<\/div>\n\t\t\t\t\t\t\t\t\t<div id=\"elementor-tab-title-4563\" class=\"elementor-tab-title elementor-tab-desktop-title\" aria-selected=\"false\" data-tab=\"3\" role=\"tab\" tabindex=\"-1\" aria-controls=\"elementor-tab-content-4563\" aria-expanded=\"false\">CD_Player.java<\/div>\n\t\t\t\t\t\t\t\t\t<div id=\"elementor-tab-title-4564\" class=\"elementor-tab-title elementor-tab-desktop-title\" aria-selected=\"false\" data-tab=\"4\" role=\"tab\" tabindex=\"-1\" aria-controls=\"elementor-tab-content-4564\" aria-expanded=\"false\">NoCDState.java<\/div>\n\t\t\t\t\t\t\t\t\t<div id=\"elementor-tab-title-4565\" class=\"elementor-tab-title elementor-tab-desktop-title\" aria-selected=\"false\" data-tab=\"5\" role=\"tab\" tabindex=\"-1\" aria-controls=\"elementor-tab-content-4565\" aria-expanded=\"false\">CDInsertState.java<\/div>\n\t\t\t\t\t\t\t\t\t<div id=\"elementor-tab-title-4566\" class=\"elementor-tab-title elementor-tab-desktop-title\" aria-selected=\"false\" data-tab=\"6\" role=\"tab\" tabindex=\"-1\" aria-controls=\"elementor-tab-content-4566\" aria-expanded=\"false\">TrackSelectedState.java<\/div>\n\t\t\t\t\t\t\t\t\t<div id=\"elementor-tab-title-4567\" class=\"elementor-tab-title elementor-tab-desktop-title\" aria-selected=\"false\" data-tab=\"7\" role=\"tab\" tabindex=\"-1\" aria-controls=\"elementor-tab-content-4567\" aria-expanded=\"false\">TrackPlaysState.java<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t<div class=\"elementor-tabs-content-wrapper\" role=\"tablist\" aria-orientation=\"vertical\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-tab-title elementor-tab-mobile-title\" aria-selected=\"true\" data-tab=\"1\" role=\"tab\" tabindex=\"0\" aria-controls=\"elementor-tab-content-4561\" aria-expanded=\"false\">main.java<\/div>\n\t\t\t\t\t<div id=\"elementor-tab-content-4561\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"1\" role=\"tabpanel\" aria-labelledby=\"elementor-tab-title-4561\" tabindex=\"0\" hidden=\"false\"><p>public class Main {<br \/>\u00a0\u00a0\u00a0 public static void main(String[] args) {<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 CD_Player cd_player = new CD_Player();<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 cd_player.insertCD();<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 cd_player.selectTrack();<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 cd_player.pressStart();<br \/>\u00a0\u00a0\u00a0 }<br \/>}<\/p><\/div>\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-tab-title elementor-tab-mobile-title\" aria-selected=\"false\" data-tab=\"2\" role=\"tab\" tabindex=\"-1\" aria-controls=\"elementor-tab-content-4562\" aria-expanded=\"false\">State.java<\/div>\n\t\t\t\t\t<div id=\"elementor-tab-content-4562\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"2\" role=\"tabpanel\" aria-labelledby=\"elementor-tab-title-4562\" tabindex=\"0\" hidden=\"hidden\"><p>public interface State {<br \/>\u00a0\u00a0\u00a0 void insertCD(CD_Player cd_player);<br \/>\u00a0\u00a0\u00a0 void selectTrack(CD_Player cd_player);<br \/>\u00a0\u00a0\u00a0 void pressStart(CD_Player cd_player);<br \/>}<\/p><\/div>\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-tab-title elementor-tab-mobile-title\" aria-selected=\"false\" data-tab=\"3\" role=\"tab\" tabindex=\"-1\" aria-controls=\"elementor-tab-content-4563\" aria-expanded=\"false\">CD_Player.java<\/div>\n\t\t\t\t\t<div id=\"elementor-tab-content-4563\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"3\" role=\"tabpanel\" aria-labelledby=\"elementor-tab-title-4563\" tabindex=\"0\" hidden=\"hidden\"><p>public class CD_Player {<br \/>\u00a0\u00a0\u00a0 State state;<br \/>\u00a0\u00a0\u00a0 public CD_Player() {<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 state = new NoCDState();<br \/>\u00a0\u00a0\u00a0 }<br \/>\u00a0\u00a0\u00a0 public void insertCD() {<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 state.insertCD(this);<br \/>\u00a0\u00a0\u00a0 }<br \/>\u00a0\u00a0\u00a0 public void selectTrack() {<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 state.selectTrack(this);<br \/>\u00a0\u00a0\u00a0 }<br \/>\u00a0\u00a0\u00a0 public void pressStart() {<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 state.pressStart(this);<br \/>\u00a0\u00a0\u00a0 }<br \/>}<\/p><\/div>\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-tab-title elementor-tab-mobile-title\" aria-selected=\"false\" data-tab=\"4\" role=\"tab\" tabindex=\"-1\" aria-controls=\"elementor-tab-content-4564\" aria-expanded=\"false\">NoCDState.java<\/div>\n\t\t\t\t\t<div id=\"elementor-tab-content-4564\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"4\" role=\"tabpanel\" aria-labelledby=\"elementor-tab-title-4564\" tabindex=\"0\" hidden=\"hidden\"><p>public class NoCDState implements State{<br \/>\u00a0\u00a0\u00a0 @Override<br \/>\u00a0\u00a0\u00a0 public void insertCD(CD_Player cd_player) {<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 System.<em>out<\/em>.println(&#8222;P\u0142yta zosta\u0142a w\u0142o\u017cona&#8221;);<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 cd_player.state = new CDInsertState();<br \/>\u00a0\u00a0\u00a0 }<br \/>\u00a0\u00a0\u00a0 @Override<br \/>\u00a0\u00a0\u00a0 public void selectTrack(CD_Player cd_player) {<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 System.<em>out<\/em>.println(&#8222;W\u0142\u00f3\u017c p\u0142yt\u0119 CD!&#8221;);<br \/>\u00a0\u00a0\u00a0 }<br \/><br \/>\u00a0\u00a0\u00a0 @Override<br \/>\u00a0\u00a0\u00a0 public void pressStart(CD_Player cd_player) {<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 System.<em>out<\/em>.println(&#8222;W\u0142\u00f3\u017c p\u0142yt\u0119 CD!&#8221;);<br \/>\u00a0\u00a0\u00a0 }<br \/>}<\/p><\/div>\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-tab-title elementor-tab-mobile-title\" aria-selected=\"false\" data-tab=\"5\" role=\"tab\" tabindex=\"-1\" aria-controls=\"elementor-tab-content-4565\" aria-expanded=\"false\">CDInsertState.java<\/div>\n\t\t\t\t\t<div id=\"elementor-tab-content-4565\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"5\" role=\"tabpanel\" aria-labelledby=\"elementor-tab-title-4565\" tabindex=\"0\" hidden=\"hidden\"><p>public class CDInsertState implements State{<br \/>\u00a0\u00a0\u00a0 @Override<br \/>\u00a0\u00a0\u00a0 public void insertCD(CD_Player cd_player) {<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 System.<em>out<\/em>.println(&#8222;P\u0142yta zosta\u0142a ju\u017c w\u0142o\u017cona&#8221;);<br \/>\u00a0\u00a0\u00a0 }<br \/><br \/>\u00a0\u00a0\u00a0 @Override<br \/>\u00a0\u00a0\u00a0 public void selectTrack(CD_Player cd_player) {<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0System.<em>out<\/em>.println(&#8222;Wybrano utw\u00f3r&#8221;);<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 cd_player.state = new TrackSelectedState();<br \/>\u00a0\u00a0\u00a0 }<br \/><br \/>\u00a0\u00a0\u00a0 @Override<br \/>\u00a0\u00a0\u00a0 public void pressStart(CD_Player cd_player) {<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 System.<em>out<\/em>.println(&#8222;Nie wybrano utworu&#8221;);<br \/>\u00a0\u00a0\u00a0 }<br \/>}<\/p><\/div>\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-tab-title elementor-tab-mobile-title\" aria-selected=\"false\" data-tab=\"6\" role=\"tab\" tabindex=\"-1\" aria-controls=\"elementor-tab-content-4566\" aria-expanded=\"false\">TrackSelectedState.java<\/div>\n\t\t\t\t\t<div id=\"elementor-tab-content-4566\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"6\" role=\"tabpanel\" aria-labelledby=\"elementor-tab-title-4566\" tabindex=\"0\" hidden=\"hidden\"><p>public class TrackSelectedState implements State{<br \/>\u00a0\u00a0\u00a0 @Override<br \/>\u00a0\u00a0\u00a0 public void insertCD(CD_Player cd_player) {<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 System.<em>out<\/em>.println(&#8222;P\u0142yta zosta\u0142a ju\u017c w\u0142o\u017cona&#8221;);<br \/>\u00a0\u00a0\u00a0 }<br \/><br \/>\u00a0\u00a0\u00a0 @Override<br \/>\u00a0\u00a0\u00a0 public void selectTrack(CD_Player cd_player) {<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 System.<em>out<\/em>.println(&#8222;Nie wybieraj znowu, wybrano ju\u017c utw\u00f3r&#8221;);<br \/>\u00a0\u00a0\u00a0 }<br \/><br \/>\u00a0\u00a0\u00a0 @Override<br \/>\u00a0\u00a0\u00a0 public void pressStart(CD_Player cd_player) {<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 System.<em>out<\/em>.println(&#8222;Zagrano utw\u00f3r&#8221;);<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 cd_player.state = new TrackPlaysState();<br \/>\u00a0\u00a0\u00a0 }<br \/>}<\/p><\/div>\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-tab-title elementor-tab-mobile-title\" aria-selected=\"false\" data-tab=\"7\" role=\"tab\" tabindex=\"-1\" aria-controls=\"elementor-tab-content-4567\" aria-expanded=\"false\">TrackPlaysState.java<\/div>\n\t\t\t\t\t<div id=\"elementor-tab-content-4567\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"7\" role=\"tabpanel\" aria-labelledby=\"elementor-tab-title-4567\" tabindex=\"0\" hidden=\"hidden\"><p>public class TrackPlaysState implements State{<br \/><br \/>\u00a0\u00a0\u00a0 @Override<br \/>\u00a0\u00a0\u00a0 public void insertCD(CD_Player cd_player) {<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 System.<em>out<\/em>.println(&#8222;P\u0142yta zosta\u0142a ju\u017c w\u0142o\u017cona&#8221;);<br \/>\u00a0\u00a0\u00a0 }<br \/><br \/>\u00a0\u00a0\u00a0 @Override<br \/>\u00a0\u00a0\u00a0 public void selectTrack(CD_Player cd_player) {<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 System.<em>out<\/em>.println(&#8222;Nie wybieraj znowu, wybrano ju\u017c utw\u00f3r&#8221;);<br \/>\u00a0\u00a0\u00a0 }<br \/><br \/>\u00a0\u00a0\u00a0 @Override<br \/>\u00a0\u00a0\u00a0 public void pressStart(CD_Player cd_player) {<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 System.<em>out<\/em>.println(&#8222;Nie trzeba klika\u0107 dwa razy, muzyka ju\u017c gra&#8221;);<br \/>\u00a0\u00a0\u00a0 }<br \/>}<\/p><\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-94152a5 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"94152a5\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-b913ef7\" data-id=\"b913ef7\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-92eca57 elementor-position-right elementor-vertical-align-middle elementor-view-default elementor-mobile-position-top elementor-widget elementor-widget-icon-box\" data-id=\"92eca57\" data-element_type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon elementor-animation-\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-lightbulb\"><\/i>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t<span  >\n\t\t\t\t\t\tPodsumowanie\t\t\t\t\t<\/span>\n\t\t\t\t<\/h3>\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tEfekt mamy ten sam co w pierwszej wersji aplikacji, jednak\u017ce teraz kod jest znacznie czytelniejszy. Zamiast wielu switch\u2019y mamy stany wyodr\u0119bnione do odr\u0119bnych klas. Kod na pewno jest \u0142atwiej rozszerzalny i trudniej co\u015b zepsu\u0107.\t\t\t\t\t<\/p>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Stan State Do czego s\u0142u\u017cy State? Jest to behawioralny wzorzec projektowy. Stan pozwala uzale\u017cni\u0107 zachowanie obiektu od stanu w kt\u00f3rym si\u0119 znajduje. Stw\u00f3rzmy przyk\u0142adowy program CD Player, aby uchwyci\u0107 istot\u0119 wzorca State. Aplikacja s\u0142u\u017cy do odtwarzania muzyki z p\u0142yty CD. Aby to uczyni\u0107 trzeba wykona\u0107 wszystkie 3 akcje w odpowiedniej kolejno\u015bci: &#8211; w\u0142o\u017cy\u0107 p\u0142yt\u0119, &#8211; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":154,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-279","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/pawel-majchrzak.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/pages\/279","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pawel-majchrzak.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/pawel-majchrzak.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/pawel-majchrzak.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pawel-majchrzak.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/comments?post=279"}],"version-history":[{"count":14,"href":"https:\/\/pawel-majchrzak.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/pages\/279\/revisions"}],"predecessor-version":[{"id":324,"href":"https:\/\/pawel-majchrzak.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/pages\/279\/revisions\/324"}],"up":[{"embeddable":true,"href":"https:\/\/pawel-majchrzak.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/pages\/154"}],"wp:attachment":[{"href":"https:\/\/pawel-majchrzak.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/media?parent=279"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}